3、Django獲取前端接口傳參

我們?nèi)粘?yīng)用中,前端通過接口和后端進行數(shù)據(jù)交互,后端接收到前端的傳參后,根據(jù)參數(shù)進行對應(yīng)的邏輯處理,然后返回對應(yīng)的結(jié)果給前端,那么Django框架下,后端是是如何接收前端傳入的參數(shù)呢?
定義好路由后,我們先簡單定義一個視圖類,通過接口調(diào)用來學(xué)習(xí)

class Test(View):
    def get(self, request):
        print('11111')
        return JsonResponse({'code': '0', 'message': '查詢成功'})
    def post(self,request):
        print('11111')
        return JsonResponse({'code': '0', 'message': '成功'})

一、url路徑攜帶查詢字符串傳參

例如 http://127.0.0.1:8000/page/test/?name="liang"&age=18
打上斷點,發(fā)送請求,然后我們通過debug的斷點計算器來觀察后端接收到的參數(shù)

image.png

可以看到,request.GET即可獲取到前端的此類傳參,獲取到的類型為QueryDict,我們可以類比為dict類型,通過以下方式可以獲取到具體的參數(shù)值:

1.request.GET.get("key")

image.png

2.request.GET['key']

image.png

值得注意的是,如果入?yún)⒅杏袃蓚€或多個相同的參數(shù),QueryDict同樣可以接收,取一個參數(shù)的多個值可以使用request.GET.getlist("key")方法,返回的是一個列表


image.png

二、請求體參數(shù)

包括:form_data,json格式,xml格式,以及文件上傳等

1、form表單

請求如下
image.png

我們通過斷點來看獲取到的數(shù)據(jù)


image.png

request.GET即可獲取到前端的此類傳參,獲取到的類型為QueryDict,我們同樣可以類比為dict類型,獲取數(shù)據(jù)方式和上面一樣request.POST.get("key"),或者request.POST["key"]

2、json請求體

Content-Type為application/json,name='liang', 'age'=18,我們在代碼的對應(yīng)視圖上打上斷點后發(fā)送請求


image.png

這次我們會發(fā)現(xiàn),用request.GET或者request.POST都無法獲取到傳參,而參數(shù)存在于request的body屬性中,返回的是基礎(chǔ)數(shù)據(jù)類型---bytes


image.png

我們可以通過json.loads(request.body,encoding='utf-8'),將入?yún)⑥D(zhuǎn)換為常用的dict類型,進行之后的邏輯處理
image.png

3.文件上傳

image.png

解析后的數(shù)據(jù)同樣存儲于request的body屬性中返回的是基礎(chǔ)數(shù)據(jù)類型---bytes
image.png

三、請求頭參數(shù)

參數(shù)存儲于request的headers屬性中,可以通過request.headers.get('key')來獲取


image.png

四、路徑參數(shù)

這種類型的請求,只在url路徑中傳入的參數(shù),比如傳入的一些id值,這些值一般都是動態(tài)的,在Django中,這種類型的請求處理方法跟上面幾種截然不同,我們一般在路由表中進行正則匹配
路徑轉(zhuǎn)換器格式:<url類型轉(zhuǎn)換器:路徑參數(shù)名>
url類型轉(zhuǎn)換器:int、path、uuid、slug等

urlpatterns = [
    path('projects/<int:pk>/',Api_withId.as_view()),
    path('projects/',Api.as_view()),
    path('test/<int:pk>/',Test.as_view())
]

視圖類中實例方法直接增加一個入?yún)?,這個入?yún)⒔邮艿降募仁锹窂絽?shù),可以在實實例方法中直接調(diào)用

class Test(View):
    def get(self, request,pk):
        print('11111')
        return JsonResponse({'code': '0', 'message': '查詢成功'})
    def post(self,request,pk):
        print('11111')
        return JsonResponse({'code': '0', 'message': '請求成功'})
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容