如何使用Django+;PostgreSQL
我想在auth_user表中,从一个Django向另一个来自其他域的Django数据库插入一个正确的密码文本 我试图生成一个加密函数,但我不知道Django如何将明文密码生成为存储在数据库中的哈希密码如何使用Django+;PostgreSQL,django,python-3.x,postgresql,django-models,Django,Python 3.x,Postgresql,Django Models,我想在auth_user表中,从一个Django向另一个来自其他域的Django数据库插入一个正确的密码文本 我试图生成一个加密函数,但我不知道Django如何将明文密码生成为存储在数据库中的哈希密码 postgres_insert_query = """ INSERT INTO auth_user (username, first_name, last_name, email, password) VALUES (%s,%s,%s,%s,%s) """
postgres_insert_query = """
INSERT INTO auth_user (username, first_name, last_name, email, password) VALUES (%s,%s,%s,%s,%s)
"""
record_to_insert = (username, first_name, last_name, email, password)
cursor.execute(postgres_insert_query, record_to_insert)
connection.commit()
cursor.close()
User
型号的set\u password
方法将允许您访问原始密码和散列密码。以下是一个例子:
class User(AbstractBaseUser, PermissionsMixin):
[...fields...]
def set_password(self, raw_password):
# Update the password in the current Django Project
super().set_password(raw_password)
# Insert the password into the other database
cursor = connections["otherdb"].cursor()
postgres_insert_query = """
INSERT INTO auth_user
(username, first_name, last_name, email, password)
VALUES (?, ?, ?, ?, ?)
"""
cursor.execute(
postgres_insert_query,
[self.username, self.first_name, self.last_name, self.email, self.password]
)
cursor.close()
在本例中,我们可以访问
raw_password
,调用set_password()
后,我们可以访问self.password
中的散列密码。每次在ORM中创建或修改用户时,都会调用此方法。例如,我使用此方法在最终用户或管理员在Django中更改LDAP中的哈希密码时更新该密码。祝你好运 您不使用Django的ORM有什么具体原因吗。它内置了设置密码的支持。@WillemVanOnsem是的,我的Django应用程序从另一个Django应用程序生成/编辑/删除用户。同一应用程序的settings.py中不存在多个数据库。那么最好调用management命令来创建一个用户,例如使用@WillemVanOnsem该工具对于服务器中的shell脚本生成用户很有用,但我的Django应用程序位于一个服务器中,我插入用户的另一个Django应用程序放在另一个服务器上。散列算法不是固定的。您可以通过更改密码\u散列器设置来更改它:因此,即使您设法让它工作,稍后它也可能会失败,因为设置已更改。