Python 通过电子邮件django注册不';行不通

Python 通过电子邮件django注册不';行不通,python,django,Python,Django,我想在Django中实现电子邮件验证注册 运行服务器-- pyrun=“python manage.py runserver 127.0.0.1:8001” 填写登记表---好的 已收到带有链接的电子邮件---OK 点击链接---收到错误: 无法访问此网站127.0.0.1拒绝连接 我如何解决错误??? 似乎urls.py还可以,我应该向允许的\u主机添加一些内容 图像 设置.py DEBUG = True ALLOWED_HOSTS = ['127.0.0.1'] STATIC_U

我想在Django中实现电子邮件验证注册

  • 运行服务器--

    pyrun=“python manage.py runserver 127.0.0.1:8001”

  • 填写登记表---好的

  • 已收到带有链接的电子邮件---OK

  • 点击链接---收到错误

    无法访问此网站127.0.0.1拒绝连接

  • 我如何解决错误???

    似乎urls.py还可以,我应该向允许的\u主机添加一些内容

    图像

    设置.py

    DEBUG = True
    ALLOWED_HOSTS = ['127.0.0.1']
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    AUTH_USER_MODEL = 'blog.AdvUser'
    
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_HOST_USER = 'alekmosk25@gmail.com'
    EMAIL_HOST_PASSWORD = '*****'
    DEFAULT_FROM_EMAIL = 'Alex'
    DEFAULT_TO_EMAIL = 'msumoskalenko@gmail.com'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    from django.dispatch import Signal
    from .utilities import send_activation_notification
    
    
    class AdvUser(AbstractUser):
        is_activated = models.BooleanField(default=True, db_index=True,
                                           verbose_name='Пpoшeл активацию?')
        send_messages = models.BooleanField(default=True, verbose_name='Слать оповещения о новых комментариях?')
    
    class Meta(AbstractUser.Meta):
            pass
    
    
    user_registrated = Signal(providing_args=['instance'])
    
    
    def user_registrated_dispatcher(sender, **kwargs):
        send_activation_notification(kwargs['instance'])
    
    
    user_registrated.connect(user_registrated_dispatcher)
    
    class RegisterUserForm(forms.ModelForm):
        email = forms.EmailField(required=True, label="Email address")
        password1 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
        password2 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
    
        def clean_password1(self):
            password1 = self.cleaned_data['password1']
            if password1:
                password_validation.validate_password(password1)
            return password1
    
        def clean(self):
            super().clean()
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                errors = {'password2': ValidationError('Введённые пароли не совпадают', code='password_mismatch')}
                raise ValidationError(errors)
            else:
                return self.cleaned_data
    
    
        def save(self, commit=True):
            user = super().save(commit=False)
            user.set_password(self.cleaned_data['password1'])
            user.is_active = False
            user.is_activated = False
            if commit:
                user.save()
            user_registrated.send(RegisterUserForm, isinstance=user)
            return user
    
        class Meta:
            model = AdvUser
            fields = ('username', 'email', 'password', 'password2',
                      'first_name', 'last_name', 'send_messages')
    
    from .views import BBLoginView, BBLogoutView, profile, RegisterUserView, RegisterDoneView, user_activate
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
        path('accounts/login/', BBLoginView.as_view(), name='login'),
        path('accounts/profile/', profile, name='profile'),
        path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    
        path('accounts/register/done', RegisterDoneView.as_view(), name='register_done'),
        path('accounts/register/', RegisterUserView.as_view(), name='register'),
        path('accounts/register/activate/<str:sign>/', user_activate, name='register_activate'),
    ]
    
    def post_list(request):
        return render(request, 'blog/post_list.html', {})
    
    
    class BBLoginView(LoginView):
        template_name = 'blog/login.html'
    
    class BBLogoutView(LoginRequiredMixin, LogoutView):
        template_name = 'blog/logout.html'
    
    @login_required
    def profile(request):
        return render(request, 'blog/profile.html')
    
    class RegisterUserView(CreateView):
        model = AdvUser
        template_name = 'blog/register_user.html'
        form_class = RegisterUserForm
        success_url = '/register_done'
    
    class RegisterDoneView(TemplateView):
        template_name = "blog/register_done.html"
    
    
    def user_activate(request, sign):
        try:
            username = signer.unsign(sign)
        except:
            return render(request, 'blog/bad_signature.html')
        user = get_object_or_404(AdvUser, username=username)
        if user.is_activated:
            template = 'blog/user_is_activated.html'
        else:
            template = 'blog/activation_done.html'
            user.is_active = True
            user.is_activated = True
            user.save()
        return render(request, template)
    
    型号.py

    DEBUG = True
    ALLOWED_HOSTS = ['127.0.0.1']
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    AUTH_USER_MODEL = 'blog.AdvUser'
    
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_HOST_USER = 'alekmosk25@gmail.com'
    EMAIL_HOST_PASSWORD = '*****'
    DEFAULT_FROM_EMAIL = 'Alex'
    DEFAULT_TO_EMAIL = 'msumoskalenko@gmail.com'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    from django.dispatch import Signal
    from .utilities import send_activation_notification
    
    
    class AdvUser(AbstractUser):
        is_activated = models.BooleanField(default=True, db_index=True,
                                           verbose_name='Пpoшeл активацию?')
        send_messages = models.BooleanField(default=True, verbose_name='Слать оповещения о новых комментариях?')
    
    class Meta(AbstractUser.Meta):
            pass
    
    
    user_registrated = Signal(providing_args=['instance'])
    
    
    def user_registrated_dispatcher(sender, **kwargs):
        send_activation_notification(kwargs['instance'])
    
    
    user_registrated.connect(user_registrated_dispatcher)
    
    class RegisterUserForm(forms.ModelForm):
        email = forms.EmailField(required=True, label="Email address")
        password1 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
        password2 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
    
        def clean_password1(self):
            password1 = self.cleaned_data['password1']
            if password1:
                password_validation.validate_password(password1)
            return password1
    
        def clean(self):
            super().clean()
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                errors = {'password2': ValidationError('Введённые пароли не совпадают', code='password_mismatch')}
                raise ValidationError(errors)
            else:
                return self.cleaned_data
    
    
        def save(self, commit=True):
            user = super().save(commit=False)
            user.set_password(self.cleaned_data['password1'])
            user.is_active = False
            user.is_activated = False
            if commit:
                user.save()
            user_registrated.send(RegisterUserForm, isinstance=user)
            return user
    
        class Meta:
            model = AdvUser
            fields = ('username', 'email', 'password', 'password2',
                      'first_name', 'last_name', 'send_messages')
    
    from .views import BBLoginView, BBLogoutView, profile, RegisterUserView, RegisterDoneView, user_activate
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
        path('accounts/login/', BBLoginView.as_view(), name='login'),
        path('accounts/profile/', profile, name='profile'),
        path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    
        path('accounts/register/done', RegisterDoneView.as_view(), name='register_done'),
        path('accounts/register/', RegisterUserView.as_view(), name='register'),
        path('accounts/register/activate/<str:sign>/', user_activate, name='register_activate'),
    ]
    
    def post_list(request):
        return render(request, 'blog/post_list.html', {})
    
    
    class BBLoginView(LoginView):
        template_name = 'blog/login.html'
    
    class BBLogoutView(LoginRequiredMixin, LogoutView):
        template_name = 'blog/logout.html'
    
    @login_required
    def profile(request):
        return render(request, 'blog/profile.html')
    
    class RegisterUserView(CreateView):
        model = AdvUser
        template_name = 'blog/register_user.html'
        form_class = RegisterUserForm
        success_url = '/register_done'
    
    class RegisterDoneView(TemplateView):
        template_name = "blog/register_done.html"
    
    
    def user_activate(request, sign):
        try:
            username = signer.unsign(sign)
        except:
            return render(request, 'blog/bad_signature.html')
        user = get_object_or_404(AdvUser, username=username)
        if user.is_activated:
            template = 'blog/user_is_activated.html'
        else:
            template = 'blog/activation_done.html'
            user.is_active = True
            user.is_activated = True
            user.save()
        return render(request, template)
    
    forms.py

    DEBUG = True
    ALLOWED_HOSTS = ['127.0.0.1']
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    AUTH_USER_MODEL = 'blog.AdvUser'
    
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_HOST_USER = 'alekmosk25@gmail.com'
    EMAIL_HOST_PASSWORD = '*****'
    DEFAULT_FROM_EMAIL = 'Alex'
    DEFAULT_TO_EMAIL = 'msumoskalenko@gmail.com'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    from django.dispatch import Signal
    from .utilities import send_activation_notification
    
    
    class AdvUser(AbstractUser):
        is_activated = models.BooleanField(default=True, db_index=True,
                                           verbose_name='Пpoшeл активацию?')
        send_messages = models.BooleanField(default=True, verbose_name='Слать оповещения о новых комментариях?')
    
    class Meta(AbstractUser.Meta):
            pass
    
    
    user_registrated = Signal(providing_args=['instance'])
    
    
    def user_registrated_dispatcher(sender, **kwargs):
        send_activation_notification(kwargs['instance'])
    
    
    user_registrated.connect(user_registrated_dispatcher)
    
    class RegisterUserForm(forms.ModelForm):
        email = forms.EmailField(required=True, label="Email address")
        password1 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
        password2 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
    
        def clean_password1(self):
            password1 = self.cleaned_data['password1']
            if password1:
                password_validation.validate_password(password1)
            return password1
    
        def clean(self):
            super().clean()
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                errors = {'password2': ValidationError('Введённые пароли не совпадают', code='password_mismatch')}
                raise ValidationError(errors)
            else:
                return self.cleaned_data
    
    
        def save(self, commit=True):
            user = super().save(commit=False)
            user.set_password(self.cleaned_data['password1'])
            user.is_active = False
            user.is_activated = False
            if commit:
                user.save()
            user_registrated.send(RegisterUserForm, isinstance=user)
            return user
    
        class Meta:
            model = AdvUser
            fields = ('username', 'email', 'password', 'password2',
                      'first_name', 'last_name', 'send_messages')
    
    from .views import BBLoginView, BBLogoutView, profile, RegisterUserView, RegisterDoneView, user_activate
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
        path('accounts/login/', BBLoginView.as_view(), name='login'),
        path('accounts/profile/', profile, name='profile'),
        path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    
        path('accounts/register/done', RegisterDoneView.as_view(), name='register_done'),
        path('accounts/register/', RegisterUserView.as_view(), name='register'),
        path('accounts/register/activate/<str:sign>/', user_activate, name='register_activate'),
    ]
    
    def post_list(request):
        return render(request, 'blog/post_list.html', {})
    
    
    class BBLoginView(LoginView):
        template_name = 'blog/login.html'
    
    class BBLogoutView(LoginRequiredMixin, LogoutView):
        template_name = 'blog/logout.html'
    
    @login_required
    def profile(request):
        return render(request, 'blog/profile.html')
    
    class RegisterUserView(CreateView):
        model = AdvUser
        template_name = 'blog/register_user.html'
        form_class = RegisterUserForm
        success_url = '/register_done'
    
    class RegisterDoneView(TemplateView):
        template_name = "blog/register_done.html"
    
    
    def user_activate(request, sign):
        try:
            username = signer.unsign(sign)
        except:
            return render(request, 'blog/bad_signature.html')
        user = get_object_or_404(AdvUser, username=username)
        if user.is_activated:
            template = 'blog/user_is_activated.html'
        else:
            template = 'blog/activation_done.html'
            user.is_active = True
            user.is_activated = True
            user.save()
        return render(request, template)
    
    url.py

    DEBUG = True
    ALLOWED_HOSTS = ['127.0.0.1']
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    AUTH_USER_MODEL = 'blog.AdvUser'
    
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_HOST_USER = 'alekmosk25@gmail.com'
    EMAIL_HOST_PASSWORD = '*****'
    DEFAULT_FROM_EMAIL = 'Alex'
    DEFAULT_TO_EMAIL = 'msumoskalenko@gmail.com'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    from django.dispatch import Signal
    from .utilities import send_activation_notification
    
    
    class AdvUser(AbstractUser):
        is_activated = models.BooleanField(default=True, db_index=True,
                                           verbose_name='Пpoшeл активацию?')
        send_messages = models.BooleanField(default=True, verbose_name='Слать оповещения о новых комментариях?')
    
    class Meta(AbstractUser.Meta):
            pass
    
    
    user_registrated = Signal(providing_args=['instance'])
    
    
    def user_registrated_dispatcher(sender, **kwargs):
        send_activation_notification(kwargs['instance'])
    
    
    user_registrated.connect(user_registrated_dispatcher)
    
    class RegisterUserForm(forms.ModelForm):
        email = forms.EmailField(required=True, label="Email address")
        password1 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
        password2 = forms.CharField(label="Password", widget=PasswordInput,
                                    help_text=password_validation.password_validators_help_text_html())
    
        def clean_password1(self):
            password1 = self.cleaned_data['password1']
            if password1:
                password_validation.validate_password(password1)
            return password1
    
        def clean(self):
            super().clean()
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                errors = {'password2': ValidationError('Введённые пароли не совпадают', code='password_mismatch')}
                raise ValidationError(errors)
            else:
                return self.cleaned_data
    
    
        def save(self, commit=True):
            user = super().save(commit=False)
            user.set_password(self.cleaned_data['password1'])
            user.is_active = False
            user.is_activated = False
            if commit:
                user.save()
            user_registrated.send(RegisterUserForm, isinstance=user)
            return user
    
        class Meta:
            model = AdvUser
            fields = ('username', 'email', 'password', 'password2',
                      'first_name', 'last_name', 'send_messages')
    
    from .views import BBLoginView, BBLogoutView, profile, RegisterUserView, RegisterDoneView, user_activate
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
        path('accounts/login/', BBLoginView.as_view(), name='login'),
        path('accounts/profile/', profile, name='profile'),
        path('accounts/logout/', BBLogoutView.as_view(), name='logout'),
    
        path('accounts/register/done', RegisterDoneView.as_view(), name='register_done'),
        path('accounts/register/', RegisterUserView.as_view(), name='register'),
        path('accounts/register/activate/<str:sign>/', user_activate, name='register_activate'),
    ]
    
    def post_list(request):
        return render(request, 'blog/post_list.html', {})
    
    
    class BBLoginView(LoginView):
        template_name = 'blog/login.html'
    
    class BBLogoutView(LoginRequiredMixin, LogoutView):
        template_name = 'blog/logout.html'
    
    @login_required
    def profile(request):
        return render(request, 'blog/profile.html')
    
    class RegisterUserView(CreateView):
        model = AdvUser
        template_name = 'blog/register_user.html'
        form_class = RegisterUserForm
        success_url = '/register_done'
    
    class RegisterDoneView(TemplateView):
        template_name = "blog/register_done.html"
    
    
    def user_activate(request, sign):
        try:
            username = signer.unsign(sign)
        except:
            return render(request, 'blog/bad_signature.html')
        user = get_object_or_404(AdvUser, username=username)
        if user.is_activated:
            template = 'blog/user_is_activated.html'
        else:
            template = 'blog/activation_done.html'
            user.is_active = True
            user.is_activated = True
            user.save()
        return render(request, template)
    

    通过改变解决了这个问题

    def send_activation_notification(user):
        if ALLOWED_HOSTS:
            #host = "http://" + ALLOWED_HOSTS[0] # BAD VERSION
            host = "http://localhost:8001" # GOOD VERSION FOR ME
        else:
            ...
    

    您有更好的解决方案吗?

    您可能在端口
    :3000
    上运行服务器,而默认端口是
    :80
    。我的别名--pyrun=“python manage.py runserver 127.0.0.1:8001”我应该更改什么?电子邮件url没有端口部分:8001只是不硬编码来自命令行参数的端口号。