创建一个新的表(模型),并将其与Django中的auth_user进行关联

2024-06-02 08:47:19 发布

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

我正在尝试创建一个新模型来跟踪当前密码和使用的最新密码。我想让它看起来像这个粗糙的例子:

ID --- CUR_PASS --- PREV_PASS
1  --- 123      --- 321
2  --- 456      --- 654

是否可以将ID设置为用户名在myauth\u user表中?你知道吗

这是我到目前为止的课程:

# class model to store previously used passwords
class oldPass(models.Model):
    # username = models.ForeignKey('something') --> instead of ID?
    current_pass = models.CharField(max_length=100)
    prev_pass = models.CharField(max_length=100)

    class Meta:  # meta class to define the table name
        db_table = "old_pass"

我正在尝试这样做,这样我就可以让ID成为用户名,在auth\u user中更改密码时,请检查旧的\u pass表并比较值,确保两者都不是。如果是它们中的任何一个,则返回一个错误。你知道吗

我最大的问题是:

  1. 我不知道如何导入auth\u user以便将用户名分配给这个新表
  2. 我不知道怎么把ID改成用户名而不是数字。(这是否可以使用ForeignKey完成?)你知道吗
  3. 我希望能够将值与传入的变量进行比较。。。你知道吗

#3示例: -我想执行User.set\u密码('pass')(以便对密码进行散列),然后我想在提交之前将此新密码与'current\u pass'和'prev\u pass'进行比较用户.保存(). 如果密码与使用的其中一个密码匹配,我想中止。你知道吗

我正在使用Django 1.9和Python 2.7.13

更新 所以看看收到的答案和更多的信息。。。这是我的新课

from django.contrib.auth.models import User
# class model to store previously used passwords
class oldPass(models.Model):
    # username = models.ForeignKey(User) --> instead of ID?
    current_pass = models.CharField(max_length=100)
    prev_pass = models.CharField(max_length=100)

    class Meta:  # meta class to define the table name
        db_table = "old_pass"

Tags: toid密码modelstablepasscurrentlength
1条回答
网友
1楼 · 发布于 2024-06-02 08:47:19
  1. from django.conf import settingssettings.AUTH_USER_MODEL是您的身份验证用户模型。

  2. 使用这样的自定义id id = models.CharField(primary_key=True)。但最重要的是,ID应该是一个无意义的领域。

  3. 您可以在执行User.set_password('pass')之前检查密码。

你知道吗型号.py你知道吗

class oldPass(models.Model):
    user = models.ForeignKey(`settings.AUTH_USER_MODEL`)
    current_pass = models.CharField(max_length=100)
    prev_pass = models.CharField(max_length=100)

    class Meta:
        db_table = "old_pass"

你知道吗视图.py你知道吗

if oldPass.objects.filter(user=user, pre_pass='pass').exists():
    raise Error
user.set_password('pass')
user.save() #at the same time, update user's password in oldPass

相关问题 更多 >