用户注册时的pythonDjango 2电子邮件验证

2024-03-29 14:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python(3.6)和Django(2.0)开发一个项目,在这个项目中,我需要在注册时验证用户的电子邮件。在

以下是我尝试过的:

名为用户的应用程序

表单.py

class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

    def save(self, commit=True):
        user = super(SignUpForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.password = self.cleaned_data['password1']
        if commit:
            user.save()
        return user

网址.py:

^{pr2}$

视图.py:

class SignUpView(generic.CreateView):
form_class = forms.SignUpForm
template_name = 'users/signup.html'
success_url = reverse_lazy('users:login')
form_valid_message = 'User has been created successfully!'
form_invalid_message = 'Something wrong'

def post(self, request, *args, **kwargs):
    if request.method == 'POST':
        print('Get post signup')
        form = forms.SignUpForm(request.POST)
        print(request.POST)
        if form.is_valid():
            print('Form is valid')
            fd = form.cleaned_data
            username = fd['username']
            email = fd['email']
            password1 = fd['password1']
            password2 = fd['password2']
            password = None
            if password1 == password2:
                password = password1

            if not (User.objects.filter(username=username).exists() or User.objects.filter(email=email).exists()):
                userObj = User.objects.create_user(username, email, password)
                userObj.first_name = fd['first_name']
                userObj.last_name = fd['last_name']
                userObj.is_active = False
                userObj.save()
                print(userObj)
                current_site = get_current_site(request)
                mail_subject = 'Activate your blog account.'
                message = render_to_string('acc_active_email.html', {
                    'user': User,
                    'domain': current_site.domain,
                    'uid': urlsafe_base64_encode(force_bytes(userObj.pk)).decode(),
                    'token': account_activation_token.make_token(userObj),
                })
                to_email = form.cleaned_data.get('email')
                email = EmailMessage(
                    mail_subject, message, to=[to_email]
                )
                email.send()
                # user = authenticate(username=username, password=password)
                # login(request, user)

                return HttpResponseRedirect('/users/login')
            else:
                return "This Email Already exists, Use another email address please!"

    else:
        form = forms.SignUpForm()

    return render(request, 'users/signup.html', {'form': form})


def activate(request, uidb64, token):
    try:
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        login(request, user)
        # return redirect('home')
        return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
    else:
        return HttpResponse('Activation link is invalid!')

我在templates目录中创建了一个模板:

{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'users:activate' uidb64=uid token=token %}
{% endautoescape %}

当我发出注册请求时,它会返回如下错误:

Form is valid Internal Server Error: /users/signup/ Traceback (most recent call last): File "/Users/abdul/PycharmProjects/Dmitry/DVirEnv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/Users/abdul/PycharmProjects/Dmitry/DVirEnv/lib/python3.6/site-packages/django/utils/deprecation.py", line 93, in call response = self.process_response(request, response) File "/Users/abdul/PycharmProjects/Dmitry/DVirEnv/lib/python3.6/site-packages/django/middleware/clickjacking.py", line 26, in process_response if response.get('X-Frame-Options') is not None: AttributeError: 'str' object has no attribute 'get' [08/Nov/2018 06:20:44] "POST /users/signup/ HTTP/1.1" 500 56497


Tags: nameselfformtokenreturnifisemail
1条回答
网友
1楼 · 发布于 2024-03-29 14:28:19

这是因为返回的是普通的string对象,而不是有效的HTTPResponse。在

return "This Email Already exists, Use another email address please!"

注意:您正在尝试使用现有电子邮件地址注册。在

相关问题 更多 >