1. 程式人生 > >4、django之請求和響應

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

用於響應模板資料