【问题标题】:Password change field reset password django密码更改字段重置密码django
【发布时间】:2019-09-12 03:03:37
【问题描述】:

我使用 django 通过电子邮件创建了一个密码重置系统,但是当我在密码页面时,如果我输入密码并确认正确,它不会做任何事情,只是重新加载页面并且似乎在表单中抛出错误.errors,但它显示此字段是必需的(错误),即使我填写了它。

此外,您是如何做到的,以便只能将一封电子邮件分配给用户。因此,在注册或更改您的信息时,同一电子邮件不能用于两个帐户。

这是我的密码重置页面的代码:

{% extends 'base.html' %}
{% block head %}
    <link href="\static\accounts\css\forms.css" rel="stylesheet">
    <script src="\static\registration\js\emailvariable.js"></script>
{% endblock %}
{% block body %}
  {% if validlink %}
    <h3 style="text-align: center">Change password</h3>
    <form id="login-form" method="post">

                {% csrf_token %}
                    <input placeholder="Password" id="id_password" name="password"
                                   type="password" class="form-control">
                    <input placeholder="Confirm Password" id="id_password2" name="password2"
                                               type="password" class="form-control">
                <div style="text-align:center;">
                    <button type="submit" class="btn btn-outline-dark centerbutton">Change password</button>
                </div>
                {% if form.errors %}
                    <p class=" label label-danger">
                        <div style="text-align: center">
                            {{ error | escape }}
                        </div>
                    </p>
                {% endif %}
            </form>
  {% else %}
    <p>
      The password reset link was invalid, possibly because it has already been used.
      Please request a new password reset.
    </p>
  {% endif %}
{% endblock %}

【问题讨论】:

  • 请给我们看一些代码并详细描述错误
  • 我一定忘记了。我编辑了帖子以显示代码
  • 展示你的观点。
  • 您使用的是默认密码重置系统还是您自己创建的?
  • 这一定与我的自定义表单有关,因为如果我使用默认表单,它似乎工作正常。顺便说一句,我没有按照实际表格的任何教程进行操作。

标签: python html django


【解决方案1】:

我不确定你的第一个问题,但我可以回答第二个问题。

class SignUpForm(UserCreationForm):

    def clean_email(self):
        email = self.cleaned_data.get('email')
        username = self.cleaned_data.get('username')
        if email and User.objects.filter(email=email).exclude(username=username).exists():
            raise forms.ValidationError(u'Email addresses must be unique.')
        return email

把类似的东西放在你有注册表单的forms.py

【讨论】:

  • 谢谢,这真的很棒,但密码更改问题是主要问题,因为它是我页面的重要组成部分。请告诉我是否有人能够解决它
  • @BobStone 仍在努力。只是想传递我所拥有的。
  • 嘿,我还想知道是否有某种方法可以在编辑配置文件时也检查电子邮件,一旦登录。我似乎在使用相同方法编辑时遇到错误个人资料。
  • @BobStone 大概您可以在您的个人资料编辑表单中添加相同的功能。
  • 您只需要修改它以确保它不是当前登录用户的电子邮件地址。
【解决方案2】:

对于您问题的电子邮件部分:

views.py

email = self.cleaned_data.get('email')
foo = User.objects.filter(email=email)
if foo:
    return error
else:
***carry forth with saving the new user***

“if foo”将查看用户是否存在于数据库中并提供给定的电子邮件地址。如果是,则返回错误。如果没有进行代码。

【讨论】:

    【解决方案3】:

    我解决了表单问题。

    你需要改变:

    <input placeholder="Password" id="id_password" name="password" type="password" class="form-control">
    <input placeholder="Confirm Password" id="id_password2" name="password2" type="password" class="form-control">
    

    到这里:

    <input placeholder="Password" name="new_password1" required id="id_new_password1" type="password" class="form-control">
    <input placeholder="Confirm Password" name="new_password2" required id="id_new_password2"
    type="password" class="form-control">
    
    

    发生的情况是您的 name 条目错误,这导致表单在默认密码重置视图中通常无法验证并返回一般错误。

    只需将它们换掉,表单就可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多