博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django rest framework(5)----解析器
阅读量:6359 次
发布时间:2019-06-23

本文共 3174 字,大约阅读时间需要 10 分钟。

目录

解析器

 (1)api/urls.py

# api/urls.pyfrom django.urls import path,re_pathfrom .views import UserView,PaserViewurlpatterns = [    re_path('(?P
[v1|v2]+)/users/', UserView.as_view(),name = 'api_user'), path('paser/', PaserView.as_view(),), #解析]

(2)views.py

from rest_framework.parsers import JSONParser,FormParserclass PaserView(APIView):    parser_classes = [JSONParser,FormParser,]    #JSONParser:表示只能解析content-type:application/json的头    #FormParser:表示只能解析content-type:application/x-www-form-urlencoded的头    def post(self,request,*args,**kwargs):        #获取解析后的结果        print(request.data)        return HttpResponse('paser')

(3)通过postman发送Json数据

 

 在后台可以获取发过来的Json数据

 

 

源码流程

 (1)dispatch

def dispatch(self, request, *args, **kwargs):        """        `.dispatch()` is pretty much the same as Django's regular dispatch,        but with extra hooks for startup, finalize, and exception handling.        """        self.args = args        self.kwargs = kwargs        #对原始request进行加工,丰富了一些功能        #Request(        #     request,        #     parsers=self.get_parsers(),        #     authenticators=self.get_authenticators(),        #     negotiator=self.get_content_negotiator(),        #     parser_context=parser_context        # )        #request(原始request,[BasicAuthentications对象,])        #获取原生request,request._request        #获取认证类的对象,request.authticators        #1.封装request        request = self.initialize_request(request, *args, **kwargs)        self.request = request        self.headers = self.default_response_headers  # deprecate?        try:            #2.认证            self.initial(request, *args, **kwargs)            # Get the appropriate handler method            if request.method.lower() in self.http_method_names:                handler = getattr(self, request.method.lower(),                                  self.http_method_not_allowed)            else:                handler = self.http_method_not_allowed            response = handler(request, *args, **kwargs)        except Exception as exc:            response = self.handle_exception(exc)        self.response = self.finalize_response(request, response, *args, **kwargs)        return self.response

(2)initialize_request

获取所有解析器

def initialize_request(self, request, *args, **kwargs):        """        Returns the initial request object.        """        parser_context = self.get_parser_context(request)        return Request(            request,            parsers=self.get_parsers(),                  #获取所有的解析器            authenticators=self.get_authenticators(),    #[BasicAuthentication(),],把所有的认证类对象封装到request里面了            negotiator=self.get_content_negotiator(),            parser_context=parser_context        )

(3)get_parsers

def get_parsers(self):        """        Instantiates and returns the list of parsers that this view can use.        """        return [parser() for parser in self.parser_classes]

(4)parser_classes

 

 同样我们可以在settings里面全局配置

#全局配置REST_FRAMEWORK = {    #版本    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",       #解析器    "DEFAULT_PARSER_CLASSES":["rest_framework.parsers.JSONParser","rest_framework.parsers.FormParser"]}

 

转载地址:http://cybma.baihongyu.com/

你可能感兴趣的文章
配置公司内部exchange服务器与外部邮箱服务器通信
查看>>
oracle large pool
查看>>
export的变量另开一个终端失效解决方法
查看>>
RH124 Chapter 3 Getting Help in Red Hat Enterprise Linux
查看>>
键盘 钩子 的代码
查看>>
198. House Robber(强盗抢劫)(LeetCode)
查看>>
window对象
查看>>
将之前的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。
查看>>
构建高并发高可用的电商平台架构实践----网址记录
查看>>
[android] 手机卫士黑名单功能(ListView结合SQLite增删改)
查看>>
ubuantu 18.04 LTS 版本解决网易云安装启动问题
查看>>
PHP 无限分类
查看>>
【leetcode】226. Invert Binary Tree
查看>>
软件项目顾问的20法则
查看>>
Java 强引用、软引用、弱引用、虚引用
查看>>
wget 命令用法详解
查看>>
centOS安装apache服务器
查看>>
第三个Sprint冲刺第一天
查看>>
使用yum仅下载不安装
查看>>
0420-mysql关键词/错误提示关键词
查看>>