request和response——請求響應物件

CREAMMM發表於2022-03-27

請求物件——request

獲取get請求的值

一次請求,返回一個響應。
位址列:http://127.0.0.1:8000/day3/get_request?lan=python
問號:代表請求引數

需求:拿到請求引數

傳入單個值

# views.py
def get_request(request):
    return HttpResponse('getrequest')
# urls.py
path('getrequest',get_request),

想要拿到位址列中的引數
print(request.GET)

發現列印出來的是字典,所以——
print(request.GET.get('lan'))

【知識點】
列印字典中的值,有兩種辦法:
1,print(request.GET.get('lan'))——(一般用這個)假設key不存在,返回空值None
2,print(request.GET['lan'])——key不存在,會丟擲異常

傳入多個值


print(request.GET.getlist('lan'))

獲取路由地址

如何來到get_request函式的(這個檢視函式)
print(request.path_info)

獲取請求方式(get/post)

print(request.method)

【知識點】
Django中位址列預設是get請求,如果要傳送post請求,需要把中介軟體的(選中的)註釋掉

【知識點】
post請求,往表單中傳入資料(用的postman)

獲取post請求的值

獲取value

假設表單中的值是這樣的:

先看看request.POST列印出什麼

拿到request.POST.get('b_title')

表單上傳

print(request.FILES)

(files裡面對應的是檔案物件)

根據請求方式選擇路由

path('testgetpost', test_get_post),
# 根據不同的請求方式做不同的處理
def test_get_post(request):
    if request.method == 'GET':
        return HttpResponse('get請求')
    elif request.method == 'POST':
        # li = [1,2]
        # print(li[2])
        return HttpResponse('post請求')
    else:
        return HttpResponse(request.method)

響應物件——response

常見的狀態碼

200(響應成功)
500(python程式碼有問題)
404(資源找不到)
405(請求不被允許)
301 302 (重定向,瀏覽器的行為)

給定響應頭

預設返回的頭資訊

 path('test_response_header',test_response_header),
def test_response_header(request):
    ret = HttpResponse('test_response_header')
    return ret

自定義頭資訊

 path('test_response_header',test_response_header),
def test_response_header(request):
    # content-type是html型別
    ret = HttpResponse('test_response_header')
    # 自定義頭資訊
    ret['msg'] = 'success'
    ret['code'] = 'ok'
    return ret

其他響應物件

json 資料格式 解決前後端資料不認識的問題 {'key':value}
前後不分離專案 :前後端全部編寫,會經常使用HttpResponse物件
前後分離專案時使用: 會經常使用JsonResponse物件

json 資料格式

用途:一般做前後分離專案時使用

path('test_json_response', test_json_response),
def test_json_response(request):
    # content-type是json型別
    return JsonResponse(request.GET)


檔案處理

path('test_file_response',test_file_response),
 def test_file_response(request):
    return FileResponse(open('manage.py','rb'))

return JsonResponse和return FileResponse的區別

return JsonResponse和return:返回值型別是Json
return FileResponse:返回值型別是檔案的型別

相關文章