Django确认码错误(生成了两个代码而不是一个)

jdg4fx2g  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(127)

我正在使用Django编写一个类,它将处理在用户创建帐户后从用户那里获取确认码。但是当函数被调用时,程序会创建一个新的随机代码,就像它应该的那样。一旦用户输入此代码并发出发布请求,问题就会出现。它生成的一个新代码,这是用户输入的代码将与之进行比较的代码。有什么办法可以绕过这个吗?

@method_decorator(login_required, name='dispatch')
class ConfirmEmail(View):

    def __init__(self, **kwargs: Any) -> None:
        super().__init__(**kwargs)
        self.code = str(random.randint(1000, 9999))

    def get(self, request):
        email = request.GET.get('email')
        phone = request.GET.get('phone')
        send_mail(
            "Confirmation Code",
            "Your confirmation code is: " + self.code,
            "to_email",
            [email, ])
        return render(request, "views/confirm_email.html")

    def post(self, request):
        confirmation_code = request.POST.get('confirmation_code', '')
        print(confirmation_code)
        print(self.code)
        if confirmation_code == self.code:
            return redirect('home')
        else:
            # The confirmation code is incorrect, display an error message.
            return render(request, "views/confirm_email.html", {'error_message': 'Invalid confirmation code'})
字符串
bbmckpt7

bbmckpt71#

如你所见。每次访问视图时都会调用init函数,代码将被重写。
解决这个问题的一个简单方法是将值存储在会话变量中。当你收到GET请求时,生成一个新的,因为get()方法有一个请求对象参数:

get(self, request):
    #set the session variablef
    request.session['code'] = str(random.randint(1000, 9999))
    email = request.GET.get('email')
    phone = request.GET.get('phone')
    send_mail(
        "Confirmation Code",
        "Your confirmation code is: " + request.session.get('code')

def post(self, request):
    confirmation_code = request.POST.get('confirmation_code', '')
    print(confirmation_code)
    print(request.session.get('code'))
    #I am using request.session.get('code') rather than session['code'] to return None if empty rather than error out.
    if confirmation_code == request.session.get('code'):
        return redirect('home')

字符串

相关问题