【问题标题】:combining django ORM with direct database access for a complex app?将 django ORM 与复杂应用程序的直接数据库访问相结合?
【发布时间】:2010-12-10 05:54:47
【问题描述】:

对不起,如果这是一个新手问题。

我们正在构建一个具有不同组件的分析应用程序。可视化和web应用在django中,后端连接驱动使用php编写,各种分析使用python编写(预计算,django只负责渲染)。

所有这些组件都访问和更新同一个数据库(mysql)。这些表由 Django ORM 创建,但根据需要由 Python 脚本 (mysqldb) 和 PHP 更新。

这种混合 django ORM 访问和直接数据库访问的方法有什么不为人知的缺点吗?对于 python 组件,我们可以使用 ('from django.core.management import setup_environ'),但直接控制 SQL 语句更有效。有没有更好的设计方法值得我们注意?

我们能想到的唯一缺点是,未来对 database/models.py 的更改会增加复杂性,但这是我们可以忍受的。

谢谢!

【问题讨论】:

    标签: mysql django-models


    【解决方案1】:

    我自己回答这个问题。

    几周以来,我们一直在正常工作。当然,唯一的缺点是,如果我们对 models.py 进行更改(使用 django ORM),我们必须手动调整 PHP 代码,这是意料之中的。

    对于经过身份验证的用户,PHP 代码使用来自 auth_user 的数据来验证传入连接。其他帖子中记录了密码 + salt 生成哈希的确切用法,请参阅What is the format in which Django passwords are stored in the database?

    编辑:@Josh 询问了 PHP sn-p,这里是:

    // ASSUMES YOU HAVE django username and password from web form POST request
    
    // GET THE HASH + SALT FOR THIS USER
    $query = "SELECT password FROM auth_user WHERE username = '$_POST[email]' LIMIT 1 ";
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_array($result);
    list($algo,$salt,$pass) = explode('$',$row['password']);
    
    // RE-HASH PASSWORD from POST request
    $hash = sha1($salt . $_POST['password']);
    $hash = "sha1$$salt$$hash";
    
    // GET HASH FROM DATABASE TO COMPARE 
    $query = "SELECT username FROM auth_user WHERE password = '$hash' LIMIT 1";
    $result = mysql_query($query) or die(mysql_error());
    

    【讨论】:

    • 我想看看用php登录django用户的php sn-p,我想做类似的事情。
    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2013-01-10
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多