我正在尝试创建一个新模型来跟踪当前密码和最近使用的密码。我希望它看起来像这个粗略的例子:
ID --- CUR_PASS --- PREV_PASS
1 --- 123 --- 321
2 --- 456 --- 654
是否可以在 auth_user 表格中将 ID 设为用户名?
这是我到目前为止的课程:
# 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_user 中的密码时,请返回 old_pass 表并比较这些值确保它不是。如果它是em中的任何一个,请回复错误。
我最大的问题是:
#3的例子: - 我想执行User.set_password('pass')(以便传递散列),然后我想在提交User.save()之前将这个新密码与'current_pass'和'prev_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"
答案 0 :(得分:0)
from django.conf import settings
,settings.AUTH_USER_MODEL
是您的auth_user模型。
使用此id = models.CharField(primary_key=True)
之类的自定义ID。但大多数情况下,ID应该是一个毫无意义的领域。
您可以在执行User.set_password('pass')
之前检查密码。
models.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"
views.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