Django 1.11生成密码重置令牌时出现意外更改

时间:2017-06-14 04:40:02

标签: python django

我已成功生成密码重置链接并使用django内置密码重置将其发送到邮件,并在需要时使用我自己的模板。

当我在我的测试项目中实现它时,就是上面的情况(只是为了不破坏我的实际项目)。但是当我将我的代码从测试项目粘贴到实际项目时,重置密码链接的生成发生了变化

在我的测试项目中工作时的令牌

  

http://localhost:8000/reset/MQ-4mv-a71bc30f3eddfc12bd21/


Token什么时候在我的实际项目中工作

  

http://localhost:8000/reset/Mg/4mv-66daf7703ee57c98aaa8/


改变MQ-和Mg /
我的问题:
1)我无法匹配URL中的正则表达式并显示我的模板而不是正在显示的django默认模板

url(r'^reset/password/success/$', AuthHandler().reset_success, name="auth.success"),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',AuthHandler().reset_password, name="password_reset_confirm"),
url(r'^reset/done/$', auth_views.password_reset_complete,name="auth.complete"),

在view.py

def forgot_password(self, request):
    # Forgot password form
    try:
        error_flag = True
        if request.method == "GET":
            error_flag = False

        form = auth.ForgotPassword()

        return auth_views.password_reset(
            request, template_name='forgot_password.html',
            extra_context={'form': form, 'error': error_flag},
            password_reset_form=auth.EmailValidationOnForgotPassword,
            post_reset_redirect='auth.success',
        )

    except Exception as e:
        print(e)

def reset_success(self, request):

    # Reset email sent to email
    try:
        return auth_views.password_reset_done(request, template_name='reset_password_success.html')
    except Exception as e:
        print(e)
def reset_password(self, request, uidb64, token):

    # Reset password page
    try:
        reset_form = auth.ResetPassword()  # template_name='te/reset_password.html',
        return auth_views.password_reset_confirm(
            request,
            template_name='reset_passwword_success.html',
            post_reset_redirect='auth.success', current_app=None,
            extra_context=None)
    except Exception as e:
        print(e)

问题是我无法进入reset_password功能页面,因此显示我的模板,其中显示了django默认值。但是当我在我的测试项目中工作时(我在那里使用了&#39; - &#39;在url的正则表达式中)

2)为什么Django会生成两种完全不同类型的链接,一种是/哪种没有它。 (据我所知,没有哈希应该有/在其中)。

1 个答案:

答案 0 :(得分:1)

这个正则表达式能做到吗?

r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$'

来自此博客:https://simpleisbetterthancomplex.com/tutorial/2016/09/19/how-to-create-password-reset-view.html