如何使用Django+;PostgreSQL

如何使用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) """

我想在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)
        """
        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散列器设置来更改它:因此,即使您设法让它工作,稍后它也可能会失败,因为设置已更改。