Django的起源&現(xiàn)狀
2005年發(fā)布,采用Python語言編寫的開源web框架
早期的時候Django主做新聞和內(nèi)容管理的
-
一個重量級的 Python Web框架,Django 配備了常用的大部分組件
- 基本配置
- 路由系統(tǒng)
- 原生HTML模板系統(tǒng)
- 視圖 view
- Model模型,數(shù)據(jù)庫連接和ORM數(shù)據(jù)庫管理
- 中間件
- Cookie & Seesion
- 分頁
- 數(shù)據(jù)庫后臺管理系統(tǒng)admin
-
Django的用途
- 網(wǎng)站后端開發(fā)
- 微信公眾號、微信小程序等后臺開發(fā)
- 基于HTTP/HTTPS協(xié)議的后臺服務(wù)器開發(fā)
- 在線語音/圖像識別服務(wù)器
- 在線第三方身份驗(yàn)證服務(wù)器等
-
Django的版本
- 最新版本:3.0.x
- 當(dāng)前教學(xué)版本:2.2.12
-
Django的官網(wǎng)
- 官方網(wǎng)址: http://www.djangoproject.com
- 中文文檔(第三方):
Django的安裝
-
查看已安裝的版本
>>> import django >>> print(django.VERSION) (2, 2, 12, 'final', 0)
-
安裝
- 在線安裝
-
$ sudo pip3 install django
安裝django的最新版本 - 或
-
$ sudo pip3 install django[==版本]
安裝django的指定版本 - 如:
- `$ sudo pip3 install django==2.2.12
-
- 離線安裝
- 下載安裝包:
- 安裝離線包
$ tar -xvf Django-2.2.12.tar.gz
$ cd Django-2.2.12
$ sudo python3 setup.py install
- 在線安裝
Django的卸載
$ pip3 uninstall django
-
Django 的開發(fā)環(huán)境
- Django 2.2.12 支持 3.5陪拘,3.6,3.7搭儒,3.8
創(chuàng)建Django項(xiàng)目
創(chuàng)建項(xiàng)目的指令
$ django-admin startproject 項(xiàng)目名稱
-
如:
- $ django-admin startproject mysite1
-
運(yùn)行
$ cd mysite1 $ python3 manage.py runserver # 或 $ python3 manage.py runserver 5000 # 指定只能本機(jī)使用127.0.0.1的5000端口訪問本機(jī)
Django項(xiàng)目的目錄結(jié)構(gòu)
-
示例:
$ django-admin startproject mysite1 $ tree mysite1/ mysite1/ ├── manage.py └── mysite1 ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 directory, 5 files
-
項(xiàng)目目錄結(jié)構(gòu)解析:
- manage.py
- 此文件是項(xiàng)目管理的主程序,在開發(fā)階段用于管理整個項(xiàng)目的開發(fā)運(yùn)行的調(diào)式
-
manage.py
包含項(xiàng)目管理的子命令, 如:-
python3 manage.py runserver
啟動服務(wù) -
python3 manage.py startapp
創(chuàng)建應(yīng)用 -
python3 manage.py migrate
數(shù)據(jù)庫遷移 ...
-
- mysite1 項(xiàng)目文件夾
- 項(xiàng)目包的主文件夾(默認(rèn)與項(xiàng)目名稱一致)
-
__init__.py
- 包初始化文件,當(dāng)此項(xiàng)目包被導(dǎo)入(import)時此文件會自動運(yùn)行
-
wsgi.py
- WSGI 即 Web Server Gateway Interface
- WEB服務(wù)網(wǎng)關(guān)接口的配置文件扇丛,僅部署項(xiàng)目時使用
-
urls.py
- 項(xiàng)目的主路由配置文件,所有的動態(tài)路徑必須先走該文件進(jìn)行匹配
-
settings.py
- Django項(xiàng)目的配置文件, 此配置文件中的一些全局變量將為Django框架的運(yùn)行傳遞一些參數(shù)
- setting.py 配置文件,啟動服務(wù)時自動調(diào)用擒滑,
- 此配置文件中也可以定義一些自定義的變量用于作用全局作用域的數(shù)據(jù)傳遞
- manage.py
settings.py
文件介紹
https://docs.djangoproject.com/en/2.2/ref/settings/
-
BASE_DIR
- 用于綁定當(dāng)前項(xiàng)目的絕對路徑(動態(tài)計(jì)算出來的), 所有文件都可以依懶此路徑
-
DEBUG
- 用于配置Django項(xiàng)目的啟動模式, 取值:
- True 表示開發(fā)環(huán)境中使用
調(diào)試模式
(用于開發(fā)中) - False 表示當(dāng)前項(xiàng)目運(yùn)行在
生產(chǎn)環(huán)境中
(不啟用調(diào)試)
- True 表示開發(fā)環(huán)境中使用
- 用于配置Django項(xiàng)目的啟動模式, 取值:
-
ALLOWED_HOSTS
- 設(shè)置允許訪問到本項(xiàng)目的host請求頭的值,取值:
- [] 空列表,表示只有host請求頭為
127.0.0.1
,localhost
能訪問本項(xiàng)目 - DEBUG = True時生效 - ['*'],表示任何請求頭的host都能訪問到當(dāng)前項(xiàng)目
- ['192.168.1.3', '127.0.0.1'] 表示只有當(dāng)前兩個host頭的值能訪問當(dāng)前項(xiàng)目
- 注意:
- 如果要在局域網(wǎng)其它主機(jī)也能訪問此主機(jī),啟動方式應(yīng)使用如下模式:
- [] 空列表,表示只有host請求頭為
-
python3 manage.py runserver 0.0.0.0:5000
# 指定網(wǎng)絡(luò)設(shè)備如果內(nèi)網(wǎng)環(huán)境下其他主機(jī)想正常訪問該站點(diǎn)叉弦,需加`ALLOWED_HOSTS = ['內(nèi)網(wǎng)ip']
- 設(shè)置允許訪問到本項(xiàng)目的host請求頭的值,取值:
-
INSTALLED_APPS
- 指定當(dāng)前項(xiàng)目中安裝的應(yīng)用列表
-
MIDDLEWARE
- 用于注冊中間件
-
TEMPLATES
- 用于指定模板的配置信息
-
DATABASES
- 用于指定數(shù)據(jù)庫的配置信息
-
LANGUAGE_CODE
- 用于指定語言配置
- 取值:
- 英文 :
"en-us"
- 中文 :
"zh-Hans"
- 英文 :
-
TIME_ZONE
- 用于指定當(dāng)前服務(wù)器端時區(qū)
- 取值:
- 世界標(biāo)準(zhǔn)時間:
"UTC"
- 中國時區(qū) :
"Asia/Shanghai"
- 世界標(biāo)準(zhǔn)時間:
-
ROOT_URLCONF
- 用于配置根級 url 配置 'mysite1.urls'
- 如:
ROOT_URLCONF = 'mysite1.urls'
注: 此模塊可以通過
from django.conf import settings
導(dǎo)入和使用
URL 介紹
URL定義
URL 即統(tǒng)一資源定位符 Uniform Resource Locator
-
作用:
- 用來表示互聯(lián)網(wǎng)上某個資源的地址丐一。
-
說明:
- 互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它淹冰。
-
URL的一般語法格式為:
protocol :// hostname[:port] / path [?query][#fragment]
-
如:
http://tts.tmooc.cn/video/showVideo?menuId=657421&version=AID201908#subject
-
說明:
-
protocol(協(xié)議)
- http 通過 HTTP 訪問該資源库车。 格式
HTTP://
- https 通過安全的 HTTPS 訪問該資源。 格式
HTTPS://
- file 資源是本地計(jì)算機(jī)上的文件樱拴。格式:
file:///
- ...
- http 通過 HTTP 訪問該資源库车。 格式
-
hostname(主機(jī)名)
- 是指存放資源的服務(wù)器的域名系統(tǒng)(DNS) 主機(jī)名柠衍、域名 或 IP 地址。
-
port(端口號)
- 整數(shù)晶乔,可選珍坊,省略時使用方案的默認(rèn)端口;
- 各種傳輸協(xié)議都有默認(rèn)的端口號瘪弓,如http的默認(rèn)端口為80垫蛆。
-
path(路由地址)
- 由零或多個“/”符號隔開的字符串,一般用來表示主機(jī)上的一個目錄或文件地址。路由地址決定了服務(wù)器端如何處理這個請求
-
query(查詢)
- 可選袱饭,用于給動態(tài)網(wǎng)頁傳遞參數(shù)川无,可有多個參數(shù),用“&”符號隔開虑乖,每個參數(shù)的名和值用“=”符號隔開懦趋。
-
fragment(信息片斷)
- 字符串,用于指定網(wǎng)絡(luò)資源中的片斷疹味。例如一個網(wǎng)頁中有多個名詞解釋仅叫,可使用fragment直接定位到某一名詞解釋。
注: [] 代表其中的內(nèi)容可省略
-
Django如何處理一個URL對應(yīng)的請求
瀏覽器 http://127.0.0.1:8000/page/2003/
1,Django 從配置文件中 根據(jù) ROOT_URLCONF 找到 主路由文件糙捺;默認(rèn)情況下诫咱,該文件在 項(xiàng)目同名目錄下的urls; 例如 mysite1/mysite1/urls.py
2,Django 加載 主路由文件中的 urlpatterns 變量
3,依次匹配 urlpatterns 中的 URL, 匹配到第一個合適的中斷后續(xù)匹配
4,匹配成功 - 調(diào)用對應(yīng)的視圖函數(shù)處理請求洪灯,返回響應(yīng)
5,匹配失敗 - 返回404響應(yīng)
主路由-urls.py樣例
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls)
path('page/2003/', views.page_2003),
path('page/2004/', views.page_2004),
]
視圖函數(shù)(view)
視圖函數(shù)是用于接收一個瀏覽器請求并通過HttpResponse對象返回?cái)?shù)據(jù)的函數(shù)坎缭。此函數(shù)可以接收瀏覽器請求并根據(jù)業(yè)務(wù)邏輯返回相應(yīng)的內(nèi)容給瀏覽器
-
視圖處理的函數(shù)的語法格式:
def xxx_view(request[, 其它參數(shù)...]): return HttpResponse對象
-
參數(shù):
- request用于綁定HttpRequest對象,通過此對象可以獲取瀏覽器的參數(shù)和數(shù)據(jù)
-
返回值
HttpResponse的對象签钩;Django會提供一系列的response對象掏呼;
-
示例:
- 視圖處理函數(shù)
views.py
# file : <項(xiàng)目同名文件夾下>/views.py from django.http import HttpResponse def page1_view(request): html = "<h1>這是第1個頁面</h1>" return HttpResponse(html)
- 視圖處理函數(shù)
Django 路由配置
- settings.py 中的
ROOT_URLCONF
指定了主路由配置列表urlpatterns的文件位置 - urls.py 主路由配置文件
# file : <項(xiàng)目同名文件夾>/urls.py urlpatterns = [ path('admin/', admin.site.urls), ... # 此處配置主路由 ]
path() 函數(shù)
用于描述路由與視圖函數(shù)的對應(yīng)關(guān)系
-
模塊
from django.urls import path
-
語法:
- path(route, views, name=None)
- 參數(shù):
- route: 字符串類型,匹配的請求路徑
- views: 指定路徑所對應(yīng)的視圖處理函數(shù)的名稱
- name: 為地址起別名铅檩,在模板中地址反向解析時使用
-
練習(xí)
- 建立一個小網(wǎng)站:
- 輸入網(wǎng)址: http://127.0.0.1:8000, 在網(wǎng)頁中輸出 : 這是我的首頁
- 輸入網(wǎng)址: http://127.0.0.1:8000/page/1, 在網(wǎng)頁中輸出 : 這是編號為1的網(wǎng)頁
- 輸入網(wǎng)址: http://127.0.0.1:8000/page/2, 在網(wǎng)頁中輸出 : 這是編號為2的網(wǎng)頁
- 思考
- 建立如上一百個網(wǎng)頁該怎么辦憎夷?
- 建立一個小網(wǎng)站:
path轉(zhuǎn)換器
語法: <轉(zhuǎn)換器類型:自定義名>
作用:若轉(zhuǎn)換器類型匹配到對應(yīng)類型的數(shù)據(jù),則將數(shù)據(jù)按照關(guān)鍵字傳參的方式傳遞給視圖函數(shù)
轉(zhuǎn)換器 | 效果 | 案例 |
---|---|---|
str | 匹配除了 '/' 之外的非空字符串 |
"v1/users/<str:username>"匹配 /v1/users/guoxiaonao |
int | 匹配0或任何正整數(shù)昧旨。返回一個 int | "page/<int:page>" 匹配 /page/100 |
slug | 匹配任意由 ASCII 字母或數(shù)字以及連字符和下劃線組成的短標(biāo)簽 | "detail/<slug:sl>" 匹配 /detail/this-is-django |
path | 匹配非空字段拾给,包括路徑分隔符 '/'
|
"v1/users/<path:ph>"匹配 /v1/goods/a/b/c |
- 練習(xí):
-
定義一個路由的格式為:
- http://127.0.0.1:8000/整數(shù)/操作字符串/整數(shù)
從路由中提取數(shù)據(jù),做相應(yīng)的操作后返回給瀏覽器
如:
輸入: 127.0.0.1:8000/100/add/200 頁面顯示結(jié)果:300 輸入: 127.0.0.1:8000/100/sub/200 頁面顯示結(jié)果:-100 輸入: 127.0.0.1:8000/100/mul/200 頁面顯示結(jié)果:20000
-
re_path()函數(shù)
在url 的匹配過程中可以使用正則表達(dá)式進(jìn)行精確匹配
-
語法:
- re_path(reg, view, name=xxx)
- 正則表達(dá)式為命名分組模式
(?P<name>pattern)
兔沃;匹配提取參數(shù)后用關(guān)鍵字傳參方式傳遞給視圖函數(shù)
-
示例:
- 路由配置文件
# file : <項(xiàng)目同名文件夾>/urls.py # 以下示例匹配 # 可匹配 http://127.0.0.1:8000/20/mul/40 # 不可匹配 http://127.0.0.1:8000/200/mul/400 urlpatterns = [ path('admin/', admin.site.urls), re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal_view), ]
- 路由配置文件
-
練習(xí):
- 訪問地址:
- http://127.0.0.1:8000/birthday/四位數(shù)字/一到兩位數(shù)字/一到兩位數(shù)字
- http://127.0.0.1:8000/birthday/一到兩位數(shù)字/一到兩位數(shù)字/四位數(shù)字
- 最終輸出: 生日為: xxxx年xx月xx日
- 如:
輸入網(wǎng)址: http://127.0.0.1:8000/birthday/2015/12/11
顯示為: 生日為:2015年12月11日
輸入網(wǎng)址: http://127.0.0.1:8000/birthday/2/28/2008
顯示為: 生日為:2008年2月28日
- 訪問地址:
HTTP協(xié)議的請求和響應(yīng)
- 請求是指瀏覽器端通過HTTP協(xié)議發(fā)送給服務(wù)器端的數(shù)據(jù)
- 響應(yīng)是指服務(wù)器端接收到請求后做相應(yīng)的處理后再回復(fù)給瀏覽器端的數(shù)據(jù)
HTTP 請求
POST /v1/tokens HTTP/1.1 -> 起始行
Host: 127.0.0.1:8000 -> headers
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 58
Origin: http://127.0.0.1:7000
Connection: keep-alive
Referer: http://127.0.0.1:7000/dadashop/templates/login.html
{"username":"guoxiaonao"} -> body
- 根據(jù)HTTP標(biāo)準(zhǔn)鸣戴,HTTP請求可以使用多種請求方法。
- HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法(最常用)
- HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法粘拾。
- HTTP1.1 請求詳述
序號 方法 描述 1 GET 請求指定的頁面信息,并返回實(shí)體主體创千。 2 HEAD 類似于get請求缰雇,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭 3 POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)追驴。數(shù)據(jù)被包含在請求體中械哟。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。 4 PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容殿雪。 5 DELETE 請求服務(wù)器刪除指定的頁面暇咆。 6 CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。 7 OPTIONS 允許客戶端查看服務(wù)器的性能。 8 TRACE 回顯服務(wù)器收到的請求爸业,主要用于測試或診斷其骄。
- HttpRequest對象
- 視圖函數(shù)的第一個參數(shù)是HttpRequest對象
- 服務(wù)器接收到http協(xié)議的請求后,會根據(jù)請求數(shù)據(jù)報(bào)文創(chuàng)建HttpRequest對象
- HttpRequest屬性
- path_info: URL字符串
- method:字符串扯旷,表示HTTP請求方法拯爽,常用值:'GET'、'POST'
- GET:QueryDict查詢字典的對象钧忽,包含查詢字符串的所有數(shù)據(jù)
- POST:QueryDict查詢字典的對象毯炮,包含post表單提交方式的所有數(shù)據(jù)
- FILES:類似于字典的對象,包含所有的上傳文件信息
- COOKIES:Python字典耸黑,包含所有的cookie桃煎,鍵和值都為字符串
- session:似于字典的對象,表示當(dāng)前的會話
- body: 字符串大刊,請求體的內(nèi)容(POST或PUT)
- scheme : 請求協(xié)議('http'/'https')
- request.get_full_path() : 請求的完整路徑
- request.get_host() : 請求的主機(jī)
- request.META : 請求中的元數(shù)據(jù)(消息頭)
- request.META['REMOTE_ADDR'] : 客戶端IP地址
HTTP 響應(yīng)
HTTP/1.0 200 OK -> 起始行
Date: Sat, 21 Mar 2020 09:44:15 GMT -> headers
Server: WSGIServer/0.2 CPython/3.6.8
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 217
Vary: Origin
Access-Control-Allow-Origin: *
{"code": 200, "username": "guoxiaonao"} -> body
當(dāng)瀏覽者訪問一個網(wǎng)頁時为迈,瀏覽者的瀏覽器會向網(wǎng)頁所在服務(wù)器發(fā)出請求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前奈揍,此網(wǎng)頁所在的服務(wù)器會返回一個包含HTTP狀態(tài)碼的信息頭用以響應(yīng)瀏覽器的請求曲尸。
HTTP狀態(tài)碼的英文為HTTP Status Code。
-
下面是常見的HTTP狀態(tài)碼:
- 200 - 請求成功
- 301 - 永久重定向-資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
- 302 - 臨時重定向
- 404 - 請求的資源(網(wǎng)頁等)不存在
- 500 - 內(nèi)部服務(wù)器錯誤
-
HTTP狀態(tài)碼分類
-
HTTP狀態(tài)碼由三個十進(jìn)制數(shù)字組成男翰,第一個十進(jìn)制數(shù)字定義了狀態(tài)碼的類型另患,后兩個數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:
分類 分類描述 1** 信息蛾绎,服務(wù)器收到請求昆箕,需要請求者繼續(xù)執(zhí)行操作 2** 成功,操作被成功接收并處理 3** 重定向租冠,需要進(jìn)一步的操作以完成請求 4** 客戶端錯誤鹏倘,請求包含語法錯誤或無法完成請求 5** 服務(wù)器錯誤,服務(wù)器在處理請求的過程中發(fā)生了錯誤
-
-
Django中的響應(yīng)對象HttpResponse:
-
構(gòu)造函數(shù)格式:
HttpResponse(content=響應(yīng)體, content_type=響應(yīng)體數(shù)據(jù)類型, status=狀態(tài)碼)
-
作用:
- 向客戶端瀏覽器返回響應(yīng)顽爹,同時攜帶響應(yīng)體內(nèi)容
-
參數(shù):
- content:表示返回的內(nèi)容纤泵。
- status_code:返回的HTTP響應(yīng)狀態(tài)碼(默認(rèn)為200)。
- content_type:指定返回?cái)?shù)據(jù)的的MIME類型(默認(rèn)為"text/html")镜粤。瀏覽器會根據(jù)這個屬性捏题,來顯示數(shù)據(jù)。如果是text/html肉渴,那么就會解析這個字符串公荧,如果text/plain,那么就會顯示一個純文本同规。
- 常用的Content-Type如下:
-
'text/html'
(默認(rèn)的循狰,html文件) -
'text/plain'
(純文本) -
'text/css'
(css文件) -
'text/javascript'
(js文件) -
'multipart/form-data'
(文件提交) -
'application/json'
(json傳輸)
-
-
'application/xml'
(xml文件)
注: 關(guān)鍵字MIME(Multipurpose Internet Mail Extensions)是指多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型窟社。
- 常用的Content-Type如下:
-
-
HttpResponse 子類
類型 作用 狀態(tài)碼 HttpResponseRedirect 重定向 302 HttpResponseNotModified 未修改 304 HttpResponseBadRequest 錯誤請求 400 HttpResponseNotFound 沒有對應(yīng)的資源 404 HttpResponseForbidden 請求被禁止 403 HttpResponseServerError 服務(wù)器錯誤 500
Django處理GET和POST請求
無論是GET還是POST,統(tǒng)一都由視圖函數(shù)接收請求绪钥,通過判斷request.method 區(qū)分具體的請求動作
-
樣例:
if request.method == 'GET': 處理GET請求時的業(yè)務(wù)邏輯 elif request.method == 'POST': 處理POST請求的業(yè)務(wù)邏輯 else: 其他請求業(yè)務(wù)邏輯
GET處理
GET請求動作灿里,一般用于向服務(wù)器獲取數(shù)據(jù)
-
能夠產(chǎn)生GET請求的場景:
瀏覽器地址欄中輸入U(xiǎn)RL,回車后
<a href="地址?參數(shù)=值&參數(shù)=值">
-
form表單中的method為get
<form method='get' action="/user/login"> 姓名:<input type="text" name="uname"> </form>
-
GET請求方式中,如果有數(shù)據(jù)需要傳遞給服務(wù)器昧识,通常會用查詢字符串(Query String)傳遞 【注意:不要傳遞敏感數(shù)據(jù)】
-
URL 格式:
xxx?參數(shù)名1=值1&參數(shù)名2=值2...
- 如:
http://127.0.0.1:8000/page1?a=100&b=200
- 如:
-
服務(wù)器端接收參數(shù)
獲取客戶端請求GET請求提交的數(shù)據(jù)
request.GET['參數(shù)名'] # QueryDict request.GET.get('參數(shù)名','默認(rèn)值') request.GET.getlist('參數(shù)名') # mypage?a=100&b=200&c=300&b=400 # request.GET=QueryDict({'a':['100'], 'b':['200','400'], 'c':['300']}) # a = request.GET['a'] # b = request.GET['b'] # Error
-
- 練習(xí):
- 訪問地址:http://127.0.0.1:8000/birthday?year=四位整數(shù)&month=整數(shù)&day=整數(shù)
- 最終輸出: 生日為: xxxx年xx月xx日
- 如:
- 輸入網(wǎng)址: http://127.0.0.1:8000/birthday?year=2025&month=12&day=11
- 顯示為: 生日為:2025年12月11日
POST處理
POST請求動作钠四,一般用于向服務(wù)器提交大量數(shù)據(jù)
-
客戶端通過表單等POST請求將數(shù)據(jù)傳遞給服務(wù)器端,如:
<form method='post' action="/login"> 姓名:<input type="text" name="username"> <input type='submit' value='登陸'> </form>
-
form 表單的name屬性
在form表單控件提交數(shù)據(jù)時,會自動搜索本表單控件內(nèi)部的子標(biāo)簽的name屬性及相應(yīng)的值跪楞,再將這些名字和值以鍵-值對的形式提交給action指定的服務(wù)器相關(guān)位置
-
在form內(nèi)能自動搜集到的name屬性的標(biāo)簽的控件有
<input name='xxx'> <select name='yyy'></select> <textarea name='zzz'></textarea>
-
-
服務(wù)器端接收參數(shù)
- 通過 request.method 來判斷是否為POST請求,如:
if request.method == 'POST': 處理POST請求的數(shù)據(jù)并響應(yīng) else: 處理非POST 請求的響應(yīng)
-
使用post方式接收客戶端數(shù)據(jù)
request.POST['參數(shù)名'] # request.POST 綁定QueryDict
request.POST.get('參數(shù)名','')
request.POST.getlist('參數(shù)名')
- 取消csrf驗(yàn)證,否則Django將會拒絕客戶端發(fā)來的POST請求
- 取消 csrf 驗(yàn)證
- 禁止掉 settings.py 中 MIDDLEWARE 中的 CsrfViewsMiddleWare 的中間件
```python
MIDDLEWARE = [
...
# 'django.middleware.csrf.CsrfViewMiddleware',
...
]
```