1. 程式人生 > >WeChat Official Account Alan 2. django

WeChat Official Account Alan 2. django

Contents

overview

  • First of all, do you know how to pronounce “Django”?

Django 的名字來源於一個吉普賽爵士吉他手的名字Django Reinhardt,至今為止,他被認為是世界上最棒的吉他手之一。
/ˈdʒæŋɡo/

django – “重量級”.
django用python 寫成, MVC 模式(or MTV)
Django的理念是DRY(Don’t Repeat Yourself).

references

Django 基礎教程

Django basic frame

  1. manage.pyy & django-admin.pyy
  • 這兩個檔案程式碼和包含命令基本是一樣的,只不過django-admin.py一般只用來建立專案,而manage.py用來管理建立好了的專案
  • 常見命令的使用,比如建立專案,建立應用,建立超級使用者,資料表建立及更新,啟動伺服器等都包含在django-admin.py和manage.py裡.
    更詳細
  1. urls.pyy
    網址入口,關聯到對應的views.py中的一個函式(或者generic類),訪問網址就對應一個函式。
  2. views.pyy
    處理使用者發出的請求,從urls.py中對應過來, 通過渲染templates中的網頁可以將顯示內容.
  3. models.pyy
    models.pyy 決定了資料庫長什麼樣.
  4. forms.pyy
    form.py是Django用來生成form表單程式碼和驗證表單資料是否合法的一個檔案, 可以在該檔案中建立Form類, 實現自定義表單的功能
from django import forms
  1. templates directory
    views.pyy 中的函式渲染templates中的Html模板
    ,得到動態內容的網頁.
  2. settings.pyy
    Django 的設定,配置檔案,比如 DEBUG 的開關,靜態檔案的位置等。
  • __file__ 這個變數可以獲取到當前檔案路徑。os.path.dirname(file) 得到檔案所在目錄,再來一個os.path.dirname()就是目錄的上一級,用一個變數儲存這個路徑,可移植性更好.
  • DEBUG = True // 部署時就不要讓使用者瞅見bug
  • ALLOWED_HOSTS 哪些域名可以訪問,即使在 Apache 或 Nginx 等中綁定了,這裡不允許的話,也是不能訪問的。
    當 DEBUG=False 時,這個為必填項,如果不想輸入,可以用 ALLOW_HOSTS = [’*’] 來允許所有的。
  • 一般來說我們只要把靜態檔案放在 APP 中的 static 目錄下,部署時用 python manage.pyy collectstatic 就可以把靜態檔案收集到(複製到) STATIC_ROOT 目錄. 也可以用STATICFILES_DIRS =()來設定.
  1. admin.pyy
    admin.pyy與後臺相關,只需少許程式碼就可以實現強大的功能.
  2. requirements.txt
    執行pip install -r requirements.txt 就可以自動安裝requirements.txt檔案制定的所有包及版本. %這是一個很好的方式%
    FBI Warning : 是在shell中哦~

基本命令

FBI Warning: 是在shell中, 不是python中.

  1. 新建專案 startproject

django-admin.pyy startproject project_name

特別是在 windows 上,如果報錯,嘗試用 django-admin 代替 django-admin.pyy 試試

如果執行成功,會自動生成一些檔案目錄, e.g. manage.pyy, urls.pyy,settings.pyy.

  1. 新建app startapp
    python manage.pyy startapp app_name
    django-admin.pyy startapp app_name
  • django-admin.pyy 是安裝Django後多出的一個命令,並不是執行的當前目錄下的django-admin.pyy(當前目錄下也沒有).
    一般一個專案有多個app,一個應用也可以用在多個專案中.
    如果執行成功,會在專案目錄下生成一個app_name directory.
    然後把新定義的app加到settings.py中的INSTALL_APPS中.
  • 新建的 app 如果不加到 INSTALL_APPS 中的話, django 就不能自動找到app中的模板檔案(app-name/templates/下的檔案)和靜態檔案(app-name/static/中的檔案)
  1. 建立or更改資料庫
    python manage.pyy makemigrations // 建立更改的檔案
    python manage.pyy migrate // 將生成的py檔案應用到資料庫
  2. 使用開發伺服器 runserver
    開發伺服器,即開發時使用,一般修改程式碼後會自動重啟,方便除錯和開發,但是由於效能問題,建議只用來測試,不要用在生產環境。
python manage.py runserver
# 當提示埠被佔用的時候,可以用其它埠:
python manage.py runserver 8001
# 監聽機器所有可用 ip (電腦可能有多個內網ip或多個外網ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外網或者區域網電腦上可以用其它電腦檢視開發伺服器
# 訪問對應的 ip加埠,比如 http://172.16.20.2:8000

View

定義檢視函式相關的URL(網址) i.e. 檢視函式<–mapping–>URL.

urls.pyy is different in different Django versions .

template

%最簡單的django.http.HttpResponse 來把內容顯示到網頁上%,但是要真的做個東西出來,當然得用模板渲染了.
預設配置下,Django 的模板系統會自動找到app下面的templates資料夾中的模板檔案。

Django 模板查詢機制

Django 查詢模板的過程是在每個 app 的 templates 資料夾中找,各個 app 的 templates 形成一個資料夾列表,Django 遍歷這個列表,一個個資料夾進行查詢,當在某一個資料夾找到的時候就停止,所有的都遍歷完了還找不到指定的模板的時候就是 Template Not Found (過程類似於Python找包)。Hence , 一個app可以用另一個app的模板檔案.

template 中迴圈/條件判斷/標籤/過濾器

  1. list 列表
mylist=["1","b"]   // may be defined in views.pyy
{%for i in mylist%}
{{i}}
{% endfor %}

usage: {{var}} {%label%} (for --> endfor)

獲取當前使用者: {{ request.user }}
獲取當前網址: {{ request.path }}
獲取當前GET引數:{{ request.GET.urlencode }}

  1. dict 字典
{% for key, value in info_dict.items %}   # in .html file
    {{ key }}: {{ value }}
{% endfor %}
  1. ==, !=, >=, <=, >, < 這些比較都可以在模板中使用
    and, or, not, in, not in 也可以在模板中使用
{% if num <= 100 and num >= 0 %}
num在0100之間
{% else %}
數值不在範圍之內!
{% endif %}

Model

Model is related to database ;
與資料庫相關的程式碼一般寫在 models.pyy 中,只需要在settings.py中配置即可,不用更改models.py中的程式碼,豐富的API極大的方便了使用。

修改資料表

Django 1.7.x 及以後的版本集成了 South 的功能,在修改models.py了後執行:

# makemigrations會在當前目錄下生成一個migrations資料夾,該資料夾的內容就是資料庫要執行的內容 
python manage.py makemigrations
#migrate就是執行之前生成的migrations檔案,這一步才是操作資料庫的一步 
python manage.py migrate

Django每次更新模型都需要執行以上兩步,Django模型增加內容需要設定變數的初始值,否則會在第一步出現問題.

QuerySet API

從資料庫中查詢出來的結果一般是一個集合,這個集合叫做 QuerySet。

靜態檔案

靜態檔案放在對應的 app 下的 static 資料夾中 或者 STATICFILES_DIRS 中的資料夾中。

部署

  1. 收集靜態檔案
#把以前放在app下static中的靜態檔案全部拷貝到 settings.pyy 中設定的 STATIC_ROOT 資料夾中
python manage.pyy collectstatic

2 use nginx or apache2
nginx + uwsgi socket 的方式來部署 Django 更主流.

test

Django中有完善的單元測試,我們可以對開發的每一個功能進行單元測試,這樣只要執行一個命令python manage.pyy test,就可以測試功能是否正常.