通过直接写入DB,将新用户添加到Django

时间:2012-07-25 18:37:46

标签: django django-models user-management

我需要以编程方式从第三方平台(PHP)向Django设置添加新用户,似乎我只需在auth_user表中编写单个条目即可实现此目的。

我说错了吗?我是否还需要做其他事情?

谢谢!

4 个答案:

答案 0 :(得分:1)

技术上是,但可能还有其他要求,例如创建由业务逻辑而非数据库管理的UserProfile。也许你应该考虑在一个单独的表/数据库中创建用户,并编写一个自定义身份验证后端,从这个共享位置导入用户。

答案 1 :(得分:1)

这可行,假设您不介意重新实现Django为您所做的事情;特别是哈希密码,但也可能像Ignacio建议的那样创建一个UserProfile对象。您还需要为项目中依赖post_savepre_save信号的代码制定另一种解决方案(如果有的话)。

您还没有解释为什么您希望以这种方式执行操作:除了共享访问SQL数据库之外,还有什么要求您不能进行任何进程间通信?

如果您可以采用不同的方式,那么使用the included UserCreationFormthe create_user() helper method设置仅限本地主机的API端点来创建用户可能更有意义。

答案 2 :(得分:0)

如果可能,我会考虑你的方法。在我看来,你冒着数据完整性问题的风险,并且通过弄乱django的表同时绕过其经过验证的业务逻辑而难以发现错误。我会通过在django中编写一个简单的API来解决这个问题,你会向你展示php脚本,它将允许django代表php添加用户。无论如何,就编码时间和复杂性而言,这5月实际上是一种更简单的方法。

答案 3 :(得分:0)

它在PHP中为我工作。

/*
 *
 * DJANGO AUTH
 * https://docs.djangoproject.com/fr/2.2/topics/auth/passwords/
 * <algorithm>$<iterations>$<salt>$<hash>
 * 
*/

function genRandomString($length = 32) {
    $retval = "";
    for ($i=0; $i < $length; $i++) { 
        $retval .= chr(rand(97,122));
    }
    return $retval;
}

$algo = 'sha256';
$password = 'your_password_here';
$salt = genRandomString(12);
$iteration = 180000;

$hash_password = base64_encode(hash_pbkdf2($algo, $password, $salt, $iteration, 32, true));
$link_for_db = 'pbkdf2_' . $algo . '$' . $iteration . '$' . $salt . '$' . $hash_password;
var_dump($link_for_db); //pbkdf2_sha256$180000$u02p8yhQmV3d$AOX+AZQmxe9gwlJaQn1P0f6rrOht7o9cVCY0nG5xa3g=