4、django之請求和響應
4.1請求
4.1.1利用HTTP協議向伺服器傳參的幾種途徑
(1)請求行中的路徑
(2)查詢字串
(3)請求體
(4)請求頭
4.1.2使用正則提取URL中的引數
(1)位置引數
# url(r'^weather1/([a-z]+)/(\d{4})/$', views.weather),
def weather1(request, city, year):
"""讀取正則中的組提取的引數"""
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
(2)關鍵字引數
# url(r'^weather2/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather2),
def weather2(request, year, city):
"""讀取正則中的關鍵字提取的引數"""
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
4.1.3提取查詢字串引數
(1)需求:提取問號後面的查詢字串
/weather3/beijing/2018/?a=10&b=20&a=30
(2)屬性
request.GET
返回QueryDict型別的物件
(3)QueryDict型別
可以儲存一鍵一值和一鍵多值
提供get()方法:讀取一鍵一值
提供getlist()方法:讀取一鍵多值
(4)程式碼演練
# /weather3/beijing/2018/?a=10&b=20&a=30 def weather3(request, year, city): """提取查詢字串引數""" print('city=%s' % city) print('year=%s' % year) a = request.GET.get('a') b = request.GET.get('b') a_list = request.GET.getlist('a') print(a,b,a_list) return HttpResponse('OK')
4.1.4提取請求體中的引數
(1)提取請求體中的表單資料
①屬性
request.POST
返回QueryDict型別的物件
②程式碼演練
# url(r'^get_body_form/$', views.get_body_form),
def get_body_form(request):
"""演示獲取請求體中的表單"""
a = request.POST.get('a')
b = request.POST.get('b')
alist = request.POST.getlist('a')
print(a)
print(b)
print(alist)
return HttpResponse('OK')
(2)提取請求體中的非表單資料
①屬性
request.body
②程式碼演練
# url(r'^get_body_json/$', views.get_body_json),
# {"a": 1, "b": 2}
def get_body_json(request):
"""演示獲取請求體中的⾮表單資料"""
print(request.META['CONTENT_TYPE'])
print(request.method, request.path)
json_str = request.body
json_str = json_str.decode()
req_data = json.loads(json_str)
print(req_data['a'])
print(req_data['b'])
return HttpResponse('OK')
4.1.5提取請求頭中的資訊
(1)提取方案
(2)程式碼實現
print(request.META['CONTENT_TYPE'])
4.1.6其它請求報文資訊
print(request.method, request.path)
4.2響應
4.2.1HttpResponse
(1)概述
匯入:from django.http import HttpResponse
檢視在接收請求並處理後,必須返回HttpResponse物件或子物件
可以使用django.http.HttpResponse來構造響應物件。
HttpResponse(content=響應體, content_type=響應體資料型別, status=狀態碼)
如: return HttpResponse('OK', content_type='text/html', status=200)
注意:響應體引數是必須傳的
(2)自定義響應頭
response = HttpResponse('OK', content_type='text/html', status=200)
response['Itcast'] = 'Python' # 自定義響應頭Itcast, 值為Python
(3)HttpResponse子類
Django提供了一系列HttpResponse的子類,可以快速設定狀態碼
- HttpResponseRedirect 301
- HttpResponsePermanentRedirect 302
- HttpResponseNotModified 304
- HttpResponseBadRequest 400
- HttpResponseNotFound 404
- HttpResponseForbidden 403
- HttpResponseNotAllowed 405
- HttpResponseGone 410
- HttpResponseServerError 500
4.2.2JsonResponse
若要返回json資料,可以使用JsonResponse來構造響應物件,作用:
- 預設會設定狀態碼
- 預設會將資料型別設定為Content-Type:application/json
- 預設會將json字典轉成json字串,再將json字串轉成二進位制響應給使用者
如:
from django.http import JsonResponse
def response_json(request):
json_dict = {"name":"zxj","age":18}
return JsonResponse(json_dict)
4.2.3redirect重定向
#需求:重定向到users應用下的index檢視
from django.shortcuts import redirect
def response_redirect(request):
#最原始的方式實現
return redirect(‘/users/index/’)
#使用反向解析實現重定向
return redirect(reverse('users:index'))
4.2.4render
用於響應模板資料