2010-12-10 17 views
1

Désolé, s'il s'agit d'une question débutant.combinant ORM django avec un accès direct à la base de données pour une application complexe?

Nous construisons une application d'analyse, avec différents composants. La visualisation et l'application web sont dans Django, les pilotes de connexion backend sont écrits en PHP, et diverses analyses sont écrites en python (précomputed, django est seulement responsable du rendu).

Tous ces composants accèdent et mettent à jour la même base de données (mysql). Les tables ont été créées par Django ORM, mais sont mises à jour par des scripts Python (mysqldb) et PHP selon les besoins.

Y a-t-il des inconvénients cachés à cette approche de mélange d'accès ORM django et d'accès direct à la base de données? Pour le composant python, nous pourrions utiliser ('from django.core.management import setup_environ'), mais il est plus efficace d'avoir un contrôle direct sur les instructions SQL. Y a-t-il une meilleure approche de conception dont nous devrions être conscients? Le seul inconvénient est que nous pouvons penser à la complexité ajoutée aux modifications futures de la base de données/models.py, mais c'est quelque chose que nous pouvons vivre avec.

Merci!

Répondre

2

Répondre moi-même.

Cela fonctionne bien depuis plusieurs semaines. Le seul inconvénient, bien sûr, est que si nous apportons des modifications à models.py (en utilisant django ORM), nous devons ajuster le code PHP à la main, ce qui serait attendu.

Pour les utilisateurs authentifiés, le code PHP utilise les données de auth_user pour authentifier les connexions entrantes. L'utilisation exacte du mot de passe + sel pour générer le hachage est documentée dans d'autres publications, voir What is the format in which Django passwords are stored in the database?.

Edit: @Josh a demandé l'extrait de code PHP, la voici:

// 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()); 
+0

Je voudrais voir l'extrait php de se connecter à des utilisateurs django avec php, je suis à la recherche de faire quelque chose de similaire. –