如何在 Django 1.9 中实现密码更改表单

3 python django django-users

我的python项目的网址在这里:https : //github.com/abylikhsanov/social

我正在尝试实现密码更改表单,以便用户可以更改他或她的密码。我该如何实施?应用程序应跟踪先前的密码,并且不应允许用户使用先前使用的密码。另外,我想实现重置密码功能。

Muh*_*san 6

您可以查看以下文档的更改密码部分。如何在 Django 中更改密码。它是这样工作的:

  1. 导航到manage.py文件所在的项目

  2. $ python manage.py shell

  3. 执行以下操作:

    from django.contrib.auth.models import User
    u = User.objects.get(username__exact='john')
    u.set_password('new password')
    u.save()
    
    Run Code Online (Sandbox Code Playgroud)

您必须制作一个表单集,并且您将在提交表单时执行此操作。

您还可以使用简单的manage.py命令:

manage.py changepassword *username*

只需输入两次新密码。

对于问题的第二部分(用户不能选择旧密码),您可以创建一个表来存储用户的旧密码。当用户输入新密码时,您可以在该表中检查他是否可以选择它。Django 有一个函数check_password用于比较两个密码。


Nik*_*ios 5

为什么不使用 django 的内置 PasswordChangeForm (django.contrib.auth.forms)。

如果您喜欢它的工作方式,请使用它,或者您可以创建一个继承 PasswordChangeForm 的新方法

    class PasswordChangeCustomForm(PasswordChangeForm):
        error_css_class = 'has-error'
        error_messages = {'password_incorrect':
                  "?? ????? ??????????? ??? ????? ?????. ????????????   ????."}
        old_password = CharField(required=True, label='???????????',
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}),
                      error_messages={
                        'required': '?? ??????????? ?? ?????? ?? ????? ????'})

        new_password1 = CharField(required=True, label='???????????',
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}),
                      error_messages={
                        'required': '?? ??????????? ?? ?????? ?? ????? ????'})
        new_password2 = CharField(required=True, label='??????????? (???????????)',
                      widget=PasswordInput(attrs={
                        'class': 'form-control'}),
                      error_messages={
                        'required': '?? ??????????? ?? ?????? ?? ????? ????'})
Run Code Online (Sandbox Code Playgroud)

稍后我将提供 clean 和 save 方法的示例

请参阅此处了解更多详情