Django視圖
路由命名與reverse反解析
在項目urls中的include函數,使用namespace參數定義路由命名空間
- url(r'^',incude('book.urls',namespqce='book'))
- 命名空間表示,凡是book.urls中定義的路由,均屬於namespqce指明的book名下
命名空間的做用:避免不一樣應用中的路由使用了相同的名字發生衝突,使用命名空間區別開python
定義普通路由時,採用name參數指明路由的名字
根據路由的名稱,返回具體的路徑
- reverse('namespace:name')
reverse('name')redis
HttpRequest對象
from django.http import HttpResponse
Url路徑參數
- 127.0.0.1:8000/book/1/200
- 路由中使用正則分組接受
- url(r('book/(?P
\d+)/(?P
\d+)'), views.get_url)
- 視圖中接受關鍵字參數
- 能夠一鍵多值的字典
- HttpResponse對象的屬性GET,POST獲取的都是QueryDict對象
- get('鍵', 默認值)
- getlist('鍵',默認值)
獲取此鍵的全部值,獲取不到返回默認值django
查詢字符串Query String
- 127.0.0.1:8000/book?k1=v1&k2=v2&k2=v3
- 查詢字符串不區分請求方式,即便客戶端進行POST方式進行請求,依然能夠經過request.GET獲取請求中的查詢字符串數據
def get_str(request):
dict = request.GET
v1 = dict.get('k1')
v2_v3 = dict.getlist('k2')
return HttpResponse('get_str_ok')json
請求體
- 表單類型Form Data
- 表單類型的請求體數據,能夠經過request.POST屬性獲取,返回QueryDict對象
- def get_form(request):
dict = request.POST
v1 = dict.get('k1')
v2_v3 = dict.getlist('k2')
return HttpRequest('get_form_ok')
- 非表單類型Non-Form Data
- 非表單類型的請求數據,Django沒法自動解析,
經過request.body屬性獲取原始的請求數據,本身按照請求體格式(JSON,XML)手動解析
request.body返回bytes類型
- request.META
獲取請求頭中的數據,返回字典類型cookie
其餘HttpRequest對象屬性
- request.methos
request.usersession
HttpResponse對象
HttpResponse
- from django.http import HttpResponse
- HttpResponse(,content=響應體,content_type=響應體數據類型,status=狀態嗎)
response = HttpResponse(響應體)
response.status_code=400 # 狀態碼
response['itcast'] = 'python' # 自定義響應頭
return responseapp
HttpRespnse子類
快速設置狀態嗎分佈式
JsonResponse
- 自動將數據轉換爲json字符串
自動設置響應頭Content-type爲application/json
return redirect('/get_header')
狀態保持
Cookie
- 設置Cookie
- HttpResponse.set_cookie(cookie名,value=cookie值,max_age=cookie有效期)
- 讀取cookie
- 刪除cookie
- Django默認啓用session
- session存儲的位置
- session操做
- request.session['鍵']=值
- request.session.get('鍵',默認值)
- request.session.clear()
- request.session.flush()
- del request.session['鍵']
- request.session.set_expiry(value)
- 設置有效期
- value是一個整數,則value秒後過時
- value爲0,會話結束過時
- value爲None,採用默認有效期,兩週
XMind: ZEN - Trial Version