欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django-rest-framework解析請(qǐng)求參數(shù)過(guò)程詳解

 更新時(shí)間:2019年07月18日 15:52:27   作者:行如風(fēng)  
這篇文章主要介紹了django-rest-framework解析請(qǐng)求參數(shù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

我們?cè)?a target="_blank" href="http://www.dbjr.com.cn/article/165696.htm">django-rest-framework 自定義swagger 文章中編寫(xiě)了接口, 調(diào)通了接口文檔. 接口文檔可以直接填寫(xiě)參數(shù)進(jìn)行請(qǐng)求, 接下來(lái)的問(wèn)題是如何接受參數(shù), 由于請(qǐng)求方式與參數(shù)序列化形式的不同, 接收參數(shù)的方式也有不同.

前提條件

服務(wù)端我們使用django-rest-framework編寫(xiě)接口.

class ReturnJson(APIView):

 coreapi_fields=(
 DocParam("token"),
 )

 def get(self, request, *args, **kwargs):
 return JsonResponse("Hello world!!!!!!!!++++++中文測(cè)試")

這是一個(gè)簡(jiǎn)單接口, ReturnJson繼承自APIView

而APIView 來(lái)自from rest_framework.views import APIView

以下 def get, def post等等的前提條件都是接口類(lèi)繼承自APIView.

當(dāng)然還可以繼承自其它的類(lèi)例如.

from rest_framework import viewsets, generics

class ReturnJson(generics.ListCreateAPIView)
class ReturnJson(viewsets.ModelViewSet)

他們的用法各有特點(diǎn), 詳情查看

django-rest-framework如何編寫(xiě)一個(gè)接口.

class ReturnJson(APIView):

 coreapi_fields=(
 DocParam("token"),
 )

 def get(self, request, *args, **kwargs):
 return JsonResponse("Hello world!!!!!!!!++++++中文測(cè)試")

 def post(self, request, *args, **kwargs):
 return JsonResponse(data={})
 
 def put(self, request, *args, **kwargs):
 return JsonResponse(data={})

對(duì)一個(gè)APIView的子類(lèi), 重寫(xiě)get, post, put等方法就相當(dāng)于解析這個(gè)路徑的get, post, put請(qǐng)求,

請(qǐng)求對(duì)象就是request對(duì)象, http header body 的內(nèi)容都被包含在request對(duì)象中.
request對(duì)象的類(lèi)來(lái)自from rest_framework.request import Request

判斷對(duì)象是否是某個(gè)類(lèi)實(shí)例化而來(lái)

from rest_framework.request import Request
if isinstance(request, Request)

下面分別分析不同情況的參數(shù)位置和類(lèi)型, 最終寫(xiě)出一個(gè)方法能夠?qū)⑷魏晤?lèi)型的請(qǐng)求參數(shù)統(tǒng)一轉(zhuǎn)換為dict方便之后的邏輯編寫(xiě).

GET

get請(qǐng)求中參數(shù)都會(huì)以http://xxx.com/api/getjson?param1=asdf&param2=123
這樣的形式拼接在url后面.

在request對(duì)象中

  • request.query_params 中可以獲取?param1=32&param2=23形式的參數(shù).
  • request.query_params 返回的數(shù)據(jù)類(lèi)型為QueryDict
  • QueryDict轉(zhuǎn)為普通python字典. query_params.dict()即可.

POST

post 請(qǐng)求參數(shù)都在請(qǐng)求體中, 但是其實(shí)你的url可以寫(xiě)成get的形式, 最終結(jié)果, 參數(shù)會(huì)有兩部分組成, 一部分在url中, 一部分在http body 中, 但是非常不建議這樣做.

接下來(lái)的代碼編寫(xiě)也不會(huì)考慮這樣的情況, post 僅考慮所有參數(shù)都在http body 中的情況.

提交類(lèi)型 參數(shù)位置 參數(shù)類(lèi)型
form-data提交, 參數(shù)在data中, 類(lèi)型為QueryDict
application/json提交 參數(shù)在data中 類(lèi)型為dict
(swagger)使用接口文檔提交, 由于使用curl提交, 雖然是post 但是參數(shù)依然被類(lèi)似get的形式拼接到了url之后, 此時(shí) 參數(shù)在query_params 中 類(lèi)型為 QueryDict
x-www-form-urlencoded 參數(shù)在data中 類(lèi)型為 QueryDict

PUT

提交類(lèi)型 參數(shù)位置 參數(shù)類(lèi)型
form-data request.data QueryDict
application/json request.data dict
x-www-form-urlencoded request.data QueryDict
(swagger) request.data dict

PATCH

提交類(lèi)型 參數(shù)位置 參數(shù)類(lèi)型
form-data request.data QueryDict
application/json request.data dict
x-www-form-urlencoded request.data QueryDict
(swagger) request.data dict

DELETE

提交類(lèi)型 參數(shù)位置 參數(shù)類(lèi)型
form-data request.data QueryDict
application/json request.data dict
x-www-form-urlencoded request.data QueryDict
(swagger) request.query_params QueryDict
iOS端提交和get情況一樣 request.query_params QueryDict

編寫(xiě)參數(shù)統(tǒng)一處理的方法

總結(jié)一下, 當(dāng)url有?param=1&param=2這樣的參數(shù)時(shí)忽略body中的參數(shù), 例如get,delete提交,如果query_params有內(nèi)容, 則忽略body內(nèi)容. 將QueryDict轉(zhuǎn)為dict返回, 再判斷request.data中是否有內(nèi)容, 類(lèi)型如何.

from django.http import QueryDict
from rest_framework.request import Request
def get_parameter_dic(request, *args, **kwargs):
 if isinstance(request, Request) == False:
 return {}

 query_params = request.query_params
 if isinstance(query_params, QueryDict):
 query_params = query_params.dict()
 result_data = request.data
 if isinstance(result_data, QueryDict):
 result_data = result_data.dict()

 if query_params != {}:
 return query_params
 else:
 return result_data

使用方法

class ReturnJson(APIView):

 coreapi_fields=(
 DocParam("token"),
 )

 def get(self, request, *args, **kwargs):
 params=get_parameter_dic(request)
 return JsonResponse(data=params)

 def post(self, request, *args, **kwargs):
 params=get_parameter_dic(request)
 return JsonResponse(data=params)

 def put(self, request, *args, **kwargs):
 params=get_parameter_dic(request)
 return JsonResponse(data=params)

最后的效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django ContentType組件詳解

    Django ContentType組件詳解

    這篇文章主要為大家介紹了Django ContentType組件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • python 中的@運(yùn)算符使用

    python 中的@運(yùn)算符使用

    這篇文章主要介紹了python 中的@運(yùn)算符使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 用python實(shí)現(xiàn)批量重命名文件的代碼

    用python實(shí)現(xiàn)批量重命名文件的代碼

    任務(wù)很簡(jiǎn)單,某個(gè)目錄下面有幾千個(gè)文件,某些文件沒(méi)有后綴名,現(xiàn)在的任務(wù)就是將所有的沒(méi)有后綴名的文件加上后綴名,python有現(xiàn)成的函數(shù)可以實(shí)現(xiàn),但是在實(shí)現(xiàn)過(guò)程中遇到幾個(gè)問(wèn)題,分享一下解決方法
    2012-05-05
  • Pandas 如何處理DataFrame中的inf值

    Pandas 如何處理DataFrame中的inf值

    這篇文章主要介紹了Pandas 如何處理DataFrame中的inf值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python對(duì)Excel的讀取的示例代碼

    python對(duì)Excel的讀取的示例代碼

    這篇文章主要介紹了python對(duì)Excel的讀取的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解python3類(lèi)型注釋annotations實(shí)用案例

    詳解python3類(lèi)型注釋annotations實(shí)用案例

    這篇文章主要介紹了詳解python3類(lèi)型注釋annotations實(shí)用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python批處理刪除和重命名文件夾的實(shí)例

    Python批處理刪除和重命名文件夾的實(shí)例

    今天小編就為大家分享一篇Python批處理刪除和重命名文件夾的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例

    計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例

    今天小編就為大家分享一篇計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python列表的切片與復(fù)制示例分析

    python列表的切片與復(fù)制示例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python列表的切片與復(fù)制示例分析及相關(guān)代碼,有興趣點(diǎn)朋友們可以參考下。
    2021-10-10
  • python獲取異常信息exc_info和print_exc的使用

    python獲取異常信息exc_info和print_exc的使用

    python通過(guò)sys.exc_info獲取異常信息,通過(guò)traceback.print_exc打印堆棧信息,包括錯(cuò)誤類(lèi)型和錯(cuò)誤位置等信息,本文就來(lái)介紹一下具體用法,感興趣的可以了解一下
    2023-12-12

最新評(píng)論