django開發總結:

一,關於setting目錄中的DEBUGphp

DEBUG=False 

把DEBUG從True改爲False後就會出現404(必需指定404和500錯語頁面,如上圖的目錄結構)找不到頁面的錯誤。緣由是DEBUG爲 True時django會默認幫咱們處理靜態文件,而爲False的話還須要咱們作點事。在全局usrs.py中加下以下代碼:html

from django.conf import settings if settings.DEBUG is False:
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.STATIC_ROOT,
        }),
   )

修改settings.py中的設置:python

STATIC_ROOT = 'F:/testweb/static'

以上設置是指定靜態資源的絕對路徑(根據你電腦的具體路徑設置正確值),如今應該能夠正確訪問了。mysql

總結:web

  • 在DEBUG爲true時咱們只須要創建static目錄後,把靜態資源放進去就能夠訪問。在DEBUG爲False時須要咱們手動指定靜態資源目錄,並配置映射關係。
  • 在正式環境下建議不採用django處理靜態資源文件,這樣對應用服務器壓力較大,也很差作cdn。能夠用ngix,apache部署靜態資源。

 

二,setting之MEDIA_ROOT正則表達式

MEDIA_ROOT主要是用來放置上傳的文件。Django的ORM有個特殊的字段叫作FileField是用來存儲文件的。不過實際上並不會把文件內 容存到數據庫裏面——由於大多數數據庫保存文件時效率低,而是保存在文件系統裏面。FileField只記錄一個路徑。FileField能夠像個 Python的file類型那樣讀寫。算法

在開發的時候MEDIA_ROOT不該該存聽任何文件。它應該指向一個空的目錄。運行Django的開發服務器時,須要在urls.py裏面加入一個MEDIA_URL的映射,才能正常顯示上傳的內容:sql

from django.conf import settings if settings.DEBUG: urlpatterns += patterns(", url(r"^media/(?P<path>.*)$", \ "django.views.static.serve", \ {"document_root": settings.MEDIA_ROOT,}), )

當工程被佈署到Apache時也要記得給MEDIA_URL作個映射。shell

STATIC_ROOT是Django 1.3新增的特性。如同字面上的意思。保存在這個目錄裏面文件被當成靜態文件處理。不過,千萬不要把本身辛苦寫的JavaScript、圖片等靜態文件放 到裏面去,接着看下去就知道了。與STATIC_ROOT搭配使用的還有STATIC_URL與STATICFILES_DIRS兩個變量。 STATIC_URL通常用默認的/static/,用於指定的靜態目錄的URL。STATICFILES_DIRS則指定一個工程裏面哪一個目錄存放了與 這個工程相關的靜態文件,它是一個列表。假定在STATICFILES_DIRS有一個目錄是"/dolphin/besteam/pages /static",其中有一個文件是common.js。那麼,在瀏覽器裏面輸入http://localhost:8000/static /common.js就能夠訪問這個JavaScript文件了。數據庫

更深層次的理解,這個東西實際上是用來方便佈署Django App的。考慮一下咱們編寫Django App的狀況,常常會有一些靜態的文件(JavaScript、圖片等)。爲了方便,把這些文件放置到App下面的static目錄裏面。每一個App都有 本身的子目錄,因此在Django 1.3以前,佈署的時候就麻煩了。有三種選擇:

 

1,是使用django.views.static.serve來處理文件。

在App的urls.py裏面加上一條:

url(r"^(?/static/P<path>.*)$", "django.views.static.serve",\ {"document_root" : "/path/to/project/app/static/"})

每一個App都要加入這條紀錄,這樣作的話,靜態通過了Django的處理,速度太慢。

 

2,是讓用戶手動寫Apache的映射。

將/static/映射到/path/to/project/app/static。這種方法更麻煩,不只URL不 能衝突,並且破壞了App的代碼獨立原則。做爲佈署者,每一個App的狀況都要至關熟悉,不能遺落(能夠強制每一個App都使用static目錄)。

 

3,是由佈署者將每一個App內的static目錄內的文件複製到一個指定的目錄。而後重寫Apache,將/static映射到這個目錄。

 

這個方案能夠說兼有第一方案與第二方案的優勢,已經接近staticfiles了。缺點是手動操做,仍是太麻煩了一點。

新的Django提供了一個方法自動地將全部的靜態文件放在一塊兒。只要在寫App的時候建立一個static子目錄專門保存靜態文件就好了。在開發階段, 沒必要費心去作映射,不須要配置urls.py。在佈署到生產環境的時候,只須要配置Apache把/static/映射到STATIC_ROOT。而後運 行manage.py collectstatic,自動地STATICFILES_DIRS列出的目錄以及各個App下的static子目錄的全部文件複製到 STATIC_ROOT。由於複製過程可能會覆蓋掉原來的文件,因此,必定不能把咱們辛苦作出來靜態文件放這邊!

在開發階段,Django把/static映射到django.contrib.staticfiles這個App。staticfiles自動地從 STATICFILES_DIRS、STATIC_ROOT以及各個App的static子目錄裏面搜索靜態文件。一旦佈署到開發環境 上,settings.py不須要從新編寫,只要在Apache的配置文件裏面寫好映射,/static將會被Apache處理。 django.contrib.staticfiles雖然仍然存在,但由於不會接收到以/static/開始的路徑,因此將不會產生做用。沒必要擔憂 Django會使用處理速度變慢。另外,當settings.DEBUG is False的時候,staticfiles將自動關閉。

 

三,Django 的settings

 

如下這一部分轉載自:http://blog.csdn.net/feng88724/article/details/7221973

基本設置

 

一個 settings 文件就是一個擁有一些模塊級變量的 Python 模塊.

 

下面是幾個 settings 的例子:

 

DEBUG = False
DEFAULT_FROM_EMAIL = 'webmaster@example.com'
TEMPLATE_DIRS = ('/home/templates/mike', '/home/templates/john')

 

因爲一個 settings 文件就是一個 Python 模塊, 因此必須遵照如下規則:

 

  • 不容許有 Python 語法錯誤.

  • 經過使用正常的 Python 語法,能夠動態設置 settings .舉例來講:

    MY_SETTING = [str(i) for i in range(30)]
  • 能夠從其它 settings 文件中導入值.

 

設置

使用 Django 時, 你必須告訴它你使用的是哪一個 settings . 要作到這一點,使用環境變量 DJANGO_SETTINGS_MODULE.

DJANGO_SETTINGS_MODULE 的值是一個 Python 路徑, 舉例來講 "mysite.settings". 注意 settings 模塊應該在 Python import 搜索路徑 中.

django-admin.py 應用程序

使用 django-admin.py 時, 你能夠一次性設定環境變量, 也能夠在運行該程序時每次顯式的將 settings 模塊顯式的傳遞給它.

例子 (Unix Bash shell):

export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin.py runserver

例子 (Windows shell):

set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin.py runserver

使用 --settings 命令行參數手工指定 settings

django-admin.py runserver --settings=mysite.settings

服務器環境 (mod_python)

若是是在服務器環境, 必須告訴 Apache/mod_python 你要使用的是哪一個 settings 文件. 經過 SetEnv 來作到這一點:

<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
</Location>

閱讀 Django mod_python 文檔 以獲得更多信息.

 

默認 settings

若是不須要, Django settings 文件能夠沒必要定義任何 settings. 由於每一個設置都有默認值. 這些默認值定義在 django/conf/global_settings.py.

下面是 Django 使用 settings 的法則:

  • 從 global_settings.py 載入默認設置.
  • 從指定的 settings 文件載入用戶設置, 須要時覆蓋掉默認設置.

注意一個用戶 settings 文件 沒必要t 導入 global_settings, 這是多餘的.

查看你改變了哪些設置

有一個簡單的辦法能夠查看你修改了哪些設置.命令 python manage.py diffsettings 顯示當前 settings 文件與 Django 默認設置的不一樣之處.

參閱 diffsettings documentation.

 

在你的代碼中使用 settings

經過從模塊 django.conf.settings 導入你須要的變量, 你的代碼能夠訪問這個變量. 例子:

from django.conf.settings import DEBUG

if DEBUG:
# Do something

注意必定 不要 從 global_settings 或你本身的 settings 模塊導入設置變量到你的代碼. django.conf.settings 歸納了默認設置和站點自定義設置的概念,它提供了一個統一的接口用於用戶代碼訪問, 也下降了用戶代碼與用戶設置的耦合程度.

 

在運行時修改 settings

不該該在程序運行時修改 settings. 舉例來講, 不要在一個 view 中作這樣的事:

from django.conf.settings import DEBUG

DEBUG = True # Don't do this!

你只應該在你的 settings 文件中設置 settings, 記住,這是原則.

 

安全性

因爲 settings 文件包含敏感信息,象數據庫密碼等.你應該很是當心的設置它的訪問權限. 舉例來講, 你能夠只容許你和 WEB 服務器用戶閱讀該文件.在一個共享主機環境時,這一點格外重要.

 

可用選項

下面是全部可用選項的列表及它們的默認值(按字母順序排列).

ABSOLUTE_URL_OVERRIDES

默認值: {} (空字典)

一個字典映射 "app_label.module_name" 字符串到一個函數, 該函數接受一個model對象做爲參數並返回它的 URL. 這是在一個安裝上覆蓋 get_absolute_url() 方法的一種方式. 例子:

ABSOLUTE_URL_OVERRIDES = {
'blogs.blogs': lambda o: "/blogs/%s/" % o.slug,
'news.stories': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
}

ADMIN_FOR

默認值: () (空的tuple)

用於 admin-site settings 模塊, 若當前站點是 admin ,它則是一個由 settings 模塊組成的 tuple (相似 'foo.bar.baz' 這樣的格式).

admin 站點在 models, views,及 template tags 的自動內省的文檔中使用該設置.

ADMIN_MEDIA_PREFIX

默認值: '/media/'

The URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a trailing slash.

ADMINS

默認值: () (空的 tuple)

一個2-元素tuple的 tuple. 列出了有權接收代碼錯誤提示的人. 當 DEBUG=False 時,一個 view 引起了異常, Django 會將詳細異常信息用電子郵件的方式發送給這些人. 該tuple的每一個成員應該是這種格式: (Full name, e-mail address). 例子:

(('John', 'john@example.com'), ('Mary', 'mary@example.com'))

ALLOWED_INCLUDE_ROOTS

默認值: () (空的 tuple)

一個字符串tuple, 只有以列表中的元素爲前綴的模板Django才能夠以``{% ssi %}`` 形式訪問 . 出於安全考慮, 在不該該訪問時,即便是模板的做者也不能訪問這些文件.

舉例來講, 若 ALLOWED_INCLUDE_ROOTS 是 ('/home/html', '/var/www'), 那麼 {% ssi /home/html/foo.txt %} 能夠正常工做, 不過 {% ssi /etc/passwd %} 卻不能.

APPEND_SLASH

默認值: True

是否給URL添加一個結尾的斜線. 只有安裝了 CommonMiddleware 以後,該選項才起做用. (參閱 middleware 文檔). 參閱 PREPEND_WWW.

CACHE_BACKEND

默認值: 'simple://'

後端使用的 cache . 參閱 cache docs.

CACHE_MIDDLEWARE_KEY_PREFIX

默認值: '' (空的字符串)

cache 中間件使用的cache key 前綴. 參閱 cache docs.

DATABASE_ENGINE

默認值: 'postgresql'

後端使用的數據庫引擎: 'postgresql''mysql''sqlite3' 或 'ado_mssql' 中的任意一個.

DATABASE_HOST

默認值: '' (空的字符串)

數據庫所在的主機. 空的字符串意味着 localhost. SQLite 不須要該項. 若是你使用 MySQL 而且該選項的值以一個斜線 ('/') 開始, MySQL 則經過一個 Unix socket 鏈接到指定的 socket. 好比:

DATABASE_HOST = '/var/run/mysql'

若是你使用 MySQL 而且該選項的值 不是 以斜線開始, 那麼該選項的值就是主機的名字.

DATABASE_NAME

默認值: '' (空的字符串)

要使用的數據庫名字. 對 SQLite, 它必須是一個數據庫文件的全路徑名字.

DATABASE_PASSWORD

默認值: '' (空的字符串)

鏈接數據庫須要的密碼. SQLite 不須要該項.

DATABASE_PORT

默認值: '' (空的字符串)

鏈接數據庫所需的數據庫端口. 空的字符串表示默認端口. SQLite 不須要該項.

DATABASE_USER

默認值: '' (空的字符串)

鏈接數據庫時所須要的用戶名. SQLite 不須要該項.

DATE_FORMAT

默認值: 'N j, Y' (舉例來講 Feb. 4, 2003)

在 Django admin change-list 頁對日期字段使用的默認日期格式, 系統中的其它部分也可能使用該格式. 參閱 allowed date format strings.

參閱 DATETIME_FORMAT 和 TIME_FORMAT.

DATETIME_FORMAT

默認值: 'N j, Y, P' (舉例來講 Feb. 4, 2003, p.m.)

在 Django admin change-list 頁對日期時間字段使用的默認日期時間格式, 系統中的其它部分也可能使用該格式. 參閱 allowed date format strings.

參閱 DATE_FORMAT 和 TIME_FORMAT.

DEBUG

默認值: False

一個開關調試模式的邏輯值

DEFAULT_CHARSET

默認值: 'utf-8'

若是一個 MIME 類型沒有人爲指定, 對全部 HttpResponse 對象將應用該默認字符集. 使用 DEFAULT_CONTENT_TYPE 來構建 Content-Type 頭.

DEFAULT_CONTENT_TYPE

默認值: 'text/html'

若是一個 MIME 類型沒有人爲指定, 對全部 HttpResponse 對象將應用該默認 content type. 使用 DEFAULT_CHARSET 來構建 Content-Type 頭.

DEFAULT_FROM_EMAIL

默認值: 'webmaster@localhost'

用於發送(站點自動生成的)管理郵件的默認 e-mail 郵箱.

DISALLOWED_USER_AGENTS

默認值: () (空的 tuple)

一個編譯的正則表達式對象列表,用於表示一些用戶代理字符串.這些用戶代理將被禁止訪問系統中的任何頁面. 使用這個對付頁面機器人或網絡爬蟲.只有安裝 CommonMiddleware 後這個選項纔有用(參閱 middleware 文檔).

EMAIL_HOST

默認值: 'localhost'

用來發送 e-mail 的主機. 參閱 EMAIL_PORT.

EMAIL_HOST_PASSWORD

默認值: '' (空的字符串)

EMAIL_HOST 中定義的 SMTP 服務器使用的密碼. 若是爲空, Django 不會嘗試進行認證.

參閱 EMAIL_HOST_USER.

EMAIL_HOST_USER

默認值: '' (空的字符串)

EMAIL_HOST 中定義的 SMTP 服務器使用的用戶名. 若是爲空, Django 不會嘗試進行認證.

參閱 EMAIL_HOST_PASSWORD.

EMAIL_PORT

默認值: 25

EMAIL_HOST 中指定的SMTP 服務器所使用的端口號.

EMAIL_SUBJECT_PREFIX

默認值: '[Django] '

django.core.mail.mail_admins 或 django.core.mail.mail_managers 發送的郵件的主題前綴.

ENABLE_PSYCO

默認值: False

若是容許 Psyco, 將使用Pscyo優化 Python 代碼. 須要 Psyco 模塊.

IGNORABLE_404_ENDS

默認值: ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')

參閱 IGNORABLE_404_STARTS.

IGNORABLE_404_STARTS

默認值: ('/cgi-bin/', '/_vti_bin', '/_vti_inf')

一個字符串 tuple . 以該tuple中元素爲開頭的 URL 應該被 404 e-mailer 忽略. 參閱 SEND_BROKEN_LINK_EMAILS 和 IGNORABLE_404_ENDS.

INSTALLED_APPS

默認值: () (空的 tuple)

一個字符串tuple ,內容是本 Django 安裝中的全部應用. 每一個字符串應該是一個包含Django應用程序的Python包的路徑全稱, django-admin.py startapp 會自動往其中添加內容.

INTERNAL_IPS

默認值: () (空的 tuple)

一個 ip 地址的 tuple(字符串形式), 它:

  • 當 DEBUG 爲 True 時,參閱調試務註解
  • 接收 X 頭(若 XViewMiddleware 已安裝), (參閱 middleware 文檔)

JING_PATH

默認值: '/usr/bin/jing'

"Jing" 執行文件路徑全名. Jing 是一個 RELAX NG 校驗器, Django 使用它對你的 model 的 XMLField 進行驗證. 參閱 http://www.thaiopensource.com/relaxng/jing.html .

LANGUAGE_CODE

默認值: 'en-us'

表示默認語言的一個字符串. 必須是標準語言格式. 舉例來講, U.S. English 就是 "en-us". 參閱 internationalization docs.

LANGUAGES

默認值: 一個 tuple (內容爲全部可用語言). 目前它的值是:

LANGUAGES = (
('bn', _('Bengali')),
('cs', _('Czech')),
('cy', _('Welsh')),
('da', _('Danish')),
('de', _('German')),
('en', _('English')),
('es', _('Spanish')),
('fr', _('French')),
('gl', _('Galician')),
('is', _('Icelandic')),
('it', _('Italian')),
('no', _('Norwegian')),
('pt-br', _('Brazilian')),
('ro', _('Romanian')),
('ru', _('Russian')),
('sk', _('Slovak')),
('sr', _('Serbian')),
('sv', _('Swedish')),
('zh-cn', _('Simplified Chinese')),
)

一個2-元素tuple<格式爲 (語言代碼, 語言名稱)>的 tuple. 該設置用於選擇可用語言.參閱 internationalization docs 瞭解細節.

一般這個默認值就足夠了.除非你打算減小提供的語言數目,不然不必修改這個設置.

MANAGERS

默認值: ADMINS (不論 ADMINS 是否已經設置)

一個和 ADMINS 一樣格式的 tuple , 當 SEND_BROKEN_LINK_EMAILS=True 時, 這些人有權接收死連接通知信息.

MEDIA_ROOT

默認值: '' (空的字符串)

一個絕對路徑, 用於保存媒體文件. 例子: "/home/media/media.lawrence.com/" 參閱 MEDIA_URL.

MEDIA_URL

默認值: '' (空的字符串)

處理媒體服務的URL(媒體文件來自 MEDIA_ROOT). 如: "http://media.lawrence.com"

MIDDLEWARE_CLASSES

默認值:

("django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.doc.XViewMiddleware")

一個django 用到的中間件 class 名稱的 tuple. 參閱 middleware 文檔.

PREPEND_WWW

默認值: False

是否爲沒有 "www." 前綴的域名添加 "www." 前綴. 當且僅當安裝有 CommonMiddleware 後該選項纔有效. (參閱 middleware 文檔).參閱 APPEND_SLASH.

ROOT_URLCONF

默認值: Not defined

一個字符串,表示你的根 URLconf 的模塊名. 舉例來講:"mydjangoapps.urls". 參閱 Django如何處理一個請求.

SECRET_KEY

默認值: '' (空的字符串)

一個密碼. 用於爲密碼哈希算法提供一個種子.將其設置爲一個隨機字符串 -- 越長越好. django-admin.py startproject 會自動給你建立一個.

SEND_BROKEN_LINK_EMAILS

默認值: False

當有人從一個有效Django-powered頁面訪問另外一個Django-powered頁面時發現404錯誤(也就是發現一個死連接)時, 是否發送一封郵件給 MANAGERS. 當且僅當 安裝有 CommonMiddleware 時該選項纔有效(參閱`middleware 文檔`_). 參閱 IGNORABLE_404_STARTS ``  IGNORABLE_404_ENDS``.

SERVER_EMAIL

默認值: 'root@localhost'

用來發送錯誤信息的郵件地址, 好比發送給 ADMINS 和 MANAGERS 的郵件.

SESSION_COOKIE_AGE

默認值: 1209600 (2周, 以秒計)

session cookies 的生命週期, 以秒計. 參閱 session docs.

SESSION_COOKIE_DOMAIN

默認值: None

session cookies 有效的域. 將其值設置爲相似 ".lawrence.com" 這樣 cookie 就能夠跨域生效, 或者使用 None 做爲一個標準的域 cookie. 參閱 session docs.

SESSION_COOKIE_NAME

默認值: 'sessionid'

session 使用的cookie 名字. 參閱 session docs.

SESSION_SAVE_EVERY_REQUEST

默認值: False

是否每次請求都保存session. 參閱 session docs.

SITE_ID

默認值: Not defined

是一個整數, 表示 django_site 表中的當前站點. 當一個數據包含多個站點數據時,你的程序能夠據此 ID 訪問特定站點的數據.

TEMPLATE_CONTEXT_PROCESSORS

默認值:

("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n")

A tuple of callables that are used to populate the context in RequestContext. These callables take a request object as their argument and return a dictionary of items to be merged into the context.

TEMPLATE_DEBUG

默認值: False

一個布爾值,用來開關模板調試模式.若設置爲 True, 若是有任何 TemplateSyntaxError,一個詳細的錯誤報告信息頁將被顯示給你.這個報告包括有關的模板片段,相應的行會自動高亮.

注意 Django 僅在 DEBUG 爲 True 時顯示這個信息頁面.

參閱 DEBUG.

TEMPLATE_DIRS

默認值: () (空的 tuple)

模板源文件目錄列表,按搜索順序. 注意要使用 Unix-風格的前置斜線(即'/'), 即使是在 Windows 上.

參閱 template documentation.

TEMPLATE_LOADERS

默認值: ('django.template.loaders.filesystem.load_template_source',)

一個元素爲可調用對象(字符串形式的)的 tuple. 這些對象知道如何導入 templates 從各類源中. 參閱 template documentation.

TEMPLATE_STRING_IF_INVALID

默認值: '' (空的字符串)

輸出文本, 做爲一個字符串. 模板系統將會在出錯 (好比說拼錯了) 時使用該變量. 參閱 How invalid variables are handled.

TIME_FORMAT

默認值: 'P' (舉例來講 p.m.)

Django admin change-list 使用的默認時間格式. 有可能系統的其它部分也使用該格式. 參閱 allowed date format strings.

參閱 DATE_FORMAT 和 DATETIME_FORMAT.

TIME_ZONE

默認值: 'America/Chicago' (咱們能夠用 'Asia/Shanghai PRC' )

一個表示當前時區的字符串. 參閱 選擇項列表.

Django 據此設置轉換全部的日期/時間 -- 並不考慮服務器的時區設置. 舉例來講, 一臺服務器能夠服務多個 Django-powered 站點,每一個站點使用一個獨立的時區設置.

USE_ETAGS

默認值: False

一個布爾值.指定是否輸出 "Etag" 頭. 這個選項能夠節省網絡帶寬,但損失性能. 只有安裝 CommonMiddleware 後這個選項纔有用(參閱 middleware 文檔)

 

建立你本身的 settings

你能夠爲本身的Django 應用程序建立自定義 settings. 只須要你遵照如下慣例:

  • 設置名稱所有大寫.
  • 若是某項設置是一個序列,優先使用 tuple.這徹底是基於性能考慮.
  • 不要爲已經存的一個設置從新發明一個名字.
相關文章
相關標籤/搜索