在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Django REST framework學(xué)習(xí)筆記(3)-請(qǐng)求和響應(yīng)

    Django REST framework在Django原有的基礎(chǔ)上,新增了一個(gè)request對(duì)象繼承了APIView視圖類,并在原有的HttpResponse響應(yīng)類的基礎(chǔ)上實(shí)現(xiàn)了一個(gè)子類Response響應(yīng)類,這2個(gè)類,都是基于內(nèi)容協(xié)商來完成數(shù)據(jù)的格式轉(zhuǎn)換的。

    REST framework傳入視圖的request對(duì)象不再是Django默認(rèn)的HttpRequest對(duì)象,而是REST framework提供的擴(kuò)展了HttpRequest類的Request類的對(duì)象。

    REST framework提供了Parser解析器,在接收到請(qǐng)求后會(huì)自動(dòng)根據(jù)Content-Type指明的請(qǐng)求數(shù)據(jù)類型(如JSON、表單等)將請(qǐng)求數(shù)據(jù)進(jìn)行parse解析,解析為類字典[QueryDict]對(duì)象保存到Request對(duì)象中。

    request -> parser ->識(shí)別客戶端請(qǐng)求頭中的Content-Type來完成數(shù)據(jù)轉(zhuǎn)換成->類字典(QueryDict,字典的子類)

    Response -> renderer ->識(shí)別客戶端請(qǐng)求頭的Accept來提取客戶期望的返回?cái)?shù)據(jù)格式,轉(zhuǎn)換成客戶端的期望格式數(shù)據(jù)

    Request

    REST framework引入了一個(gè)擴(kuò)展常規(guī)HttpRequest的Request對(duì)象,并提供了更靈活的請(qǐng)求解析。允許你使用JSON data或 其他media types像通常處理表單數(shù)據(jù)一樣處理請(qǐng)求。

    常用屬性

    1 request.data返回請(qǐng)求主題的解析內(nèi)容。這跟標(biāo)準(zhǔn)的request.POST和request.FILES類似,并且還具有以下特點(diǎn):

    • 包括所有解析的內(nèi)容,文件(file) 和 非文件(non-file inputs)。
    • 支持解析POST以外的HTTP method , 比如 PUT, PATCH。
    • 更加靈活,不僅僅支持表單數(shù)據(jù),傳入同樣的JSON數(shù)據(jù)一樣可以正確解析,并且不用做額外的處理(意思是前端不管提交的是表單數(shù)據(jù),還是JSON數(shù)據(jù),.data都能夠正確解析)。

    request.POST # 只處理表單數(shù)據(jù) 只適用于’POST’方法 request.data # 處理任意數(shù)據(jù) 適用于’POST’,’PUT’和’PATCH’方法

    2 request.query_params等同于request.GET,不過其名字更加容易理解。為了代碼更加清晰可讀,推薦使用request.query_params ,而不是Django中的request.GET,這樣能夠讓你的代碼更加明顯的體現(xiàn)出任何HTTP method類型都可能包含查詢參數(shù)(query parameters),而不僅僅只是GET請(qǐng)求。

    3 request._request獲取django封裝的Request對(duì)象

    由于REST framework的Request擴(kuò)展于Django的HttpRequest,所有其他標(biāo)準(zhǔn)屬性和方法也可用。例如request.META和 request.session字典都可以正常使用。

    #基本使用 from rest_framework.views import APIView #from rest_framework.request import Request from rest_framework.response import Response class StuAPIView(APIView): def post(self, request): “””獲取請(qǐng)求體數(shù)據(jù)””” print(f”drf.request.data={request.data}”) # 接受的數(shù)據(jù)會(huì)解析成字典 # json: drf.request.data={‘name’: ‘you1’, ‘desc’: ‘hello world’} # form表單: drf.request.data= “””獲取查詢參數(shù)””” print(f”drf.request.query_params={request.query_params}”) # return Response({“msg”: “ok”})

    Response

    REST框架還引入了一個(gè)Response對(duì)象,使用該類構(gòu)造響應(yīng)對(duì)象時(shí),響應(yīng)的具體數(shù)據(jù)內(nèi)容會(huì)被轉(zhuǎn)換(render渲染)成符合前端需求的類型。

    REST framework提供了renderer渲染器,用來根據(jù)請(qǐng)求頭中的Accept(接收數(shù)據(jù)類型聲明)來自動(dòng)轉(zhuǎn)換響應(yīng)數(shù)據(jù)到對(duì)應(yīng)格式,如果前端請(qǐng)求中未聲明Accept,則采用Content-Type方式處理響應(yīng)數(shù)據(jù)。

    # 由于是默認(rèn)的配置,所以settings配置文件中可以不配置以下選項(xiàng) REST_FRAMEWORK = { ‘DEFAULT_RENDERER_CLASSES’: [ #默認(rèn)響應(yīng)渲染類 ‘rest_framework.renderers.JSONRenderer’, #json渲染器 ‘rest_framework.renderers.BrowsableAPIRenderer’, #瀏覽器渲染器,有調(diào)試界面 ] } #構(gòu)造方法 Response(data, status=None, template_name=None, headers=None, content_type=None) #參數(shù): data: 響應(yīng)的序列化數(shù)據(jù)。 status: 響應(yīng)的狀態(tài)代碼。默認(rèn)為200。 template_name: 選擇 HTMLRenderer 時(shí)使用的模板名稱。 headers: 設(shè)置 HTTP header,字典類型。 content_type: 響應(yīng)的內(nèi)容類型,通常渲染器會(huì)根據(jù)內(nèi)容協(xié)商的結(jié)果自動(dòng)設(shè)置,但有些時(shí)候需要手動(dòng)指定。 #比較完整的使用 response={‘code’:100,’msg’:’查詢成功’,’result’:ser.data} return Response(response,status=status.HTTP_201_CREATED,headers={‘xxx’:”xxx”})

    常用屬性

  • .data:還沒有渲染,但已經(jīng)序列化的響應(yīng)數(shù)據(jù)。
  • .status_code:狀態(tài)碼
  • .content:將會(huì)返回的響應(yīng)內(nèi)容,必須先調(diào)用 .render() 方法,才能訪問 .content
  • .template_name:只有在 response 的渲染器是 HTMLRenderer 或其他自定義模板渲染器時(shí)才需要提供
  • .accepted_renderer:用于將會(huì)返回的響應(yīng)內(nèi)容的渲染器實(shí)例從視圖返回響應(yīng)之前由 APIView 或 @api_view 自動(dòng)設(shè)置。
  • .accepted_media_type:內(nèi)容協(xié)商階段選擇的媒體類型從視圖返回響應(yīng)之前由 APIView 或 @api_view 自動(dòng)設(shè)置。
  • .renderer_context:將傳遞給渲染器的 .render() 方法的附加的上下文信息字典從視圖返回響應(yīng)之前由 APIView 或 @api_view 自動(dòng)設(shè)置。
  • 狀態(tài)碼

    為了方便設(shè)置狀態(tài)碼,REST framewrok在rest_framework.status模塊中提供了常用狀態(tài)碼常量。

    from rest_framework import status #1.信息告知 – 1xx HTTP_100_CONTINUE HTTP_101_SWITCHING_PROTOCOLS #2.成功 – 2xx HTTP_200_OK HTTP_201_CREATED HTTP_202_ACCEPTED HTTP_203_NON_AUTHORITATIVE_INFORMATION HTTP_204_NO_CONTENT HTTP_205_RESET_CONTENT HTTP_206_PARTIAL_CONTENT HTTP_207_MULTI_STATUS #3.重定向 – 3xx HTTP_300_MULTIPLE_CHOICES HTTP_301_MOVED_PERMANENTLY HTTP_302_FOUND HTTP_303_SEE_OTHER HTTP_304_NOT_MODIFIED HTTP_305_USE_PROXY HTTP_306_RESERVED HTTP_307_TEMPORARY_REDIRECT #4.客戶端錯(cuò)誤 – 4xx HTTP_400_BAD_REQUEST HTTP_401_UNAUTHORIZED HTTP_402_PAYMENT_REQUIRED HTTP_403_FORBIDDEN HTTP_404_NOT_FOUND HTTP_405_METHOD_NOT_ALLOWED HTTP_406_NOT_ACCEPTABLE HTTP_407_PROXY_AUTHENTICATION_REQUIRED HTTP_408_REQUEST_TIMEOUT HTTP_409_CONFLICT HTTP_410_GONE HTTP_411_LENGTH_REQUIRED HTTP_412_PRECONDITION_FAILED HTTP_413_REQUEST_ENTITY_TOO_LARGE HTTP_414_REQUEST_URI_TOO_LONG HTTP_415_UNSUPPORTED_MEDIA_TYPE HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE HTTP_417_EXPECTATION_FAILED HTTP_422_UNPROCESSABLE_ENTITY HTTP_423_LOCKED HTTP_424_FAILED_DEPENDENCY HTTP_428_PRECONDITION_REQUIRED HTTP_429_TOO_MANY_REQUESTS HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS #5.服務(wù)器錯(cuò)誤 – 5xx HTTP_500_INTERNAL_SERVER_ERROR HTTP_501_NOT_IMPLEMENTED HTTP_502_BAD_GATEWAY HTTP_503_SERVICE_UNAVAILABLE HTTP_504_GATEWAY_TIMEOUT HTTP_505_HTTP_VERSION_NOT_SUPPORTED HTTP_507_INSUFFICIENT_STORAGE HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

    封裝Response

    參考鏈接:https://www.jianshu.com/p/c0be24752584

    #1.response.py from rest_framework.response import Response class APIResponse(Response): def __init__(self, code=100, msg=’成功’, data=None, status=None, headers=None, exception=False, content_type=None, **kwargs): dic = {‘code’: code, ‘msg’: msg} if data: #如果data有值,說明要往里面放東西 dic[‘data’] = data if kwargs: #自定義傳的參數(shù)會(huì)添加到字典里 dic.update(kwargs) super().__init__(data=dic, status=status, headers=headers, exception=exception, content_type=content_type) #2.在視圖中使用 from .response import APIResponse return APIResponse(data={‘name’: ‘fana’, ‘age’: 19})

    解析器

    REST framework 包含許多內(nèi)置的解析器類,允許接受各種媒體類型(media types)的請(qǐng)求。還支持自定義解析器,這使你可以靈活地設(shè)計(jì) API 接受的媒體類型。

    #1.settings.py #查看默認(rèn)解析器 from rest_framework import settings REST_FRAMEWORK = { ‘DEFAULT_RENDERER_CLASSES’: [ #渲染器 ‘rest_framework.renderers.JSONRenderer’, ‘rest_framework.renderers.TemplateHTMLRenderer’, ], ‘DEFAULT_PARSER_CLASSES’: [ #解析器 ‘rest_framework.parsers.JSONParser’, ‘rest_framework.parsers.FormParser’, ‘rest_framework.parsers.MultiPartParser’, ], }

    YAML

    GitHub:https://jpadilla.github.io/django-rest-framework-yaml

    REST framework YAML提供YAML解析和渲染支持。它以前直接包含在REST framework包中,現(xiàn)在作為第三方包

    #1.安裝模塊 pip install djangorestframework-yaml #2.settings.py REST_FRAMEWORK = { ‘DEFAULT_PARSER_CLASSES’: ( ‘rest_framework_yaml.parsers.YAMLParser’, ), ‘DEFAULT_RENDERER_CLASSES’: ( ‘rest_framework_yaml.renderers.YAMLRenderer’, ), }

    XML

    GitHub:https://jpadilla.github.io/django-rest-framework-xml/

    REST Framework XML提供了一種簡(jiǎn)單的非正式XML格式。它以前直接包含在REST framework包中,現(xiàn)在作為第三方包。

    #1.安裝模塊 pip install djangorestframework-xml #2.settings.py REST_FRAMEWORK = { ‘DEFAULT_PARSER_CLASSES’: ( ‘rest_framework_xml.parsers.XMLParser’, ), ‘DEFAULT_RENDERER_CLASSES’: ( ‘rest_framework_xml.renderers.XMLRenderer’, ), }

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月4日 21:15
    下一篇 2022年7月4日 21:15

    相關(guān)推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

      對(duì)于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

      2022年11月27日
    • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

      短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

      2022年11月27日
    • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)韺毧蓧?mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

      寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧?mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

      2022年11月25日
    • 小紅書平臺(tái)的一些機(jī)制及玩法詳解(小紅書玩法有哪些)

      關(guān)于小紅書 一:小紅書平臺(tái)的一些機(jī)制 1. 筆記內(nèi)容的CES評(píng)分機(jī)制 2. 筆記流量入口與長(zhǎng)尾效應(yīng) 二:小紅書優(yōu)質(zhì)筆記的特點(diǎn)(分維度、類型分析) 1.筆記的本身架構(gòu)組成 維度 2.…

      2022年11月25日
    • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

      CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊(cè),可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

      2022年11月25日
    • 博客營(yíng)銷的3大優(yōu)勢(shì)解析(博客營(yíng)銷怎么做)

      不知不覺已經(jīng)寫了24篇文章,加上這篇是第25篇了,都是自己這幾年來用過的營(yíng)銷方法,如果遇到有些不懂的,我會(huì)咨詢我的朋友和同事幫忙,盡量讓每一篇有價(jià)值,哪怕是對(duì)大家有一點(diǎn)點(diǎn)幫助也行,…

      2022年11月25日
    • 什么是內(nèi)容營(yíng)銷策略如何策劃一套成功的內(nèi)容營(yíng)銷策略

      很多時(shí)候,營(yíng)銷人員會(huì)在創(chuàng)作營(yíng)銷內(nèi)容時(shí)感到沮喪,這也是很多企業(yè)至今沒用好數(shù)字化營(yíng)銷工具的重要原因之一。 舉個(gè)例子,您可能會(huì)花上數(shù)小時(shí)期待制作一些令人驚嘆的東西,實(shí)際卻是得到很少的受眾…

      2022年11月25日
    • 直播帶貨詳細(xì)腳本(直播文案策劃怎么寫)

      短視頻運(yùn)營(yíng)策劃方案怎么寫?涉及哪幾個(gè)方面? 我在網(wǎng)上看到好多千篇一律的文章,關(guān)于【短視頻運(yùn)營(yíng)策劃方案】這一塊,基本都是在講賬號(hào)的內(nèi)容本身。 你內(nèi)容做得再好,卻不掌握算法的規(guī)律,能有…

      2022年11月25日
    • 閑魚上怎么賣東西快?閑魚賺錢必知技巧(怎么在閑魚里面賣東西)

      自從閑魚這個(gè)平臺(tái)出現(xiàn)以后,隨著這些年的發(fā)展,閑魚也成為了很多人開店賺錢的重要途徑。一些新人也想在閑魚上試試水,看看能不能賺到錢。如今閑魚上既可以賣二手閑置物品,也可以賣一些新品,那…

      2022年11月25日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息