Django noob。导出和导入的表从MySQL到PostgreSQL。客户和客户的表称为users
。
尝试使用python manage.py shell
将测试帐户的密码更新为Django用于加密的密码。尝试以下显然无法正常工作,因为哈希算法未被导入:
from account.models import Users
user = Users.objects.filter(pk=2)
user.set_password('new_password')
错误,因为有no attribute 'set_password'
。
精细。试试所有教程所说的内容:
from django.contrib.auth.models import User
User.objects.filter(pk=2)
Queryset []
User.objects.all()
然后它返回auth_user
表中的唯一用户。
基本上,我如何对遗留users
表使用Django加密?
看来Django客户端和客户帐户进入auth_user
表?我认为该表更适合应该有/admin
访问权限的用户以及使用该应用程序的客户/客户使用不同的表格。
编辑1:
遗留表的密码存储了管理员定义的盐(我相信Django为每个用户或类似的东西使用一个独特的算法,这就是为什么我提到盐对每个人都是相同的)+发送的用户密码通过哈希算法(我认为是SHA256)。所以不是纯文本。
我清除了每个人的密码,并且只是想制作新密码。由于旧表使用了一个哈希并且Django使用了完全不同的哈希,我不想在Django哈希下搞乱解密和重新加密。从头开始。
此外,我希望继续为客户/客户使用users
表,并为auth_user
的用户保留/admin
...除非我的想法是错误的。< / p>
答案 0 :(得分:2)
嗯,你还没有提到你的遗产表是什么样的,这个答案假定它有基本的用户名,密码和电子邮件字段。如果您在密码被存储的情况下以明文形式存储密码,但如果您使用某种第三方解决方案,则每个用户都必须重置其密码。
import account.models import User as LegacyUser
import django.contrib.auth.models User
users = []
for u in LegacyUser.objects.all():
new_user = User(username=u.user, email=u.email)
new_user.set_password(u.password)
users.append(new_user)
User.objects.bulk_create(users)
以上是如果你想要挽救密码,如果你不是这样做的话:
INSERT INTO auth_user(username,password,email) SELECT username, password, email FROM account_user
在psql或pgadmin或其他什么。这应该快得多。
另外,我想继续为客户/客户使用users表 并保留auth_user给/ admin的用户...除非我的想法 错了。
很抱歉,您的想法是错误的。不需要两个表,因为django.contrib.auth.User表有两个字段is_staff
和is_superuser
专门用于处理这种情况。
或者,您可以完全抛弃django.contrib.auth.models.User模型并使用您的用户模型作为默认模型。请参阅Specifying a custom user model有两个模型只是重复代码和工作,并可能引入安全问题