2010-04-27 13 views
8

是否可以在Django環境之外使用Django Model和Form來運行視圖文件?在Django之外使用模型和表單?

+2

你想使用視圖,ORM和窗體框架 - 爲什麼不只是使用所有的Django? – 2010-04-27 14:28:04

+1

@Dominic,因爲我不想要返回HttpResponses – RadiantHex 2010-04-27 15:06:51

+3

你想返回什麼? – Puddingfox 2010-04-27 15:23:04

回答

11

這是可能的。 Django非常擅長直蟒,沒有太多的魔力,所以你通常可以解耦。視圖只是函數,可以從任何其他Python代碼中調用。

要使用ORM,您必須在腳本中設置django環境。看着「manage.py」文件顯示瞭如何做到這一點:

from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

現在,你可以打電話給你想要的任何觀點:

from myapp.views import some_view 

some_view(...) 

請記住,該公約是視圖功能以一個HttpRequest對象作爲它們的第一個參數,並返回一個HttpResponse對象。你可以建立一個請求對象自己:

from django.http import HttpRequest 

result = some_view(HttpRequest(), ...) 

但如果你真的沒有興趣使用的HttpResponse或HttpRequest的對象,或許你應該只是不要讓你的方法「的意見」。也許他們是「utils」或其他東西。這些都不是由Django強制執行的,但遵循這樣的慣例是很好的形式,所以其他程序員可以閱讀你的代碼。

編輯: 2010-05-24:修正了「setup_environ」(以前錯誤地使用了「execute_manager」)。 Reference

+2

這非常有用。謝謝。它確實應該包含在Django書籍或類似的東西中。我一直在試圖弄清楚如何利用模型API輕鬆地將一些數據加載到數據庫中,這正是我所需要的。再次感謝。 – CMaury 2011-10-02 18:10:42

+0

嗨,我有錯誤:'from django.core.management import setup_environ ImportError:無法導入名稱setup_environ' – jeff 2015-08-23 13:57:09

1

在Django的1.6,這可以簡單地通過將項目目錄的路徑進行,然後設置DJANGO_SETTINGS_MODULE環境變量,如下圖所示:

import sys 
import os 

sys.path.append(path_to_the_project_dir) 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') 

然後,你就可以開始導入您的模型。

0

在Django的1.7,你還需要做到:

import sys 
import os 

sys.path.append(path_to_the_project_dir) 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') 

import django 
django.setup() 

否則,你會打一個AppRegistryNotReady例外。