码迷,mamicode.com
首页 > 其他好文 > 详细

Django REST framework之解析器实例以及源码流程分析

时间:2019-08-05 23:04:32      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:print   rto   cascade   get   foreign   json格式   ica   setting   源码   

解析器

我们都知道源生Django默认只能解析content-type:application/x-www-form-urlencoded头格式的,若果是json格式,form-data格式都要自己处理。

但是在restframework已经为我们做好了,只要配置上,就能帮我们解析请求的数据

举例说明:

表设计:

 1 from django.db import models
 2 
 3 
 4 class UserGroup(models.Model):
 5     title = models.CharField(max_length=32)
 6 
 7 
 8 class UserInfo(models.Model):
 9     user_type_choices = (
10         (1, 普通用户),
11         (2, vip),
12         (3, svip),
13     )
14     user_type = models.IntegerField(choices=user_type_choices)
15     username = models.CharField(max_length=32, unique=True)
16     password = models.CharField(max_length=64)
17     group = models.ForeignKey(UserGroup, on_delete=models.CASCADE)
18     roles = models.ManyToManyField(Role)
19 
20 
21 class UserToken(models.Model):
22     user = models.OneToOneField(to=UserInfo, on_delete=models.CASCADE)
23     token = models.CharField(max_length=64)
24 
25 
26 class Role(models.Model):
27     title = models.CharField(max_length=32)

路由:

 1 from django.contrib import admin
 2 from django.urls import path, re_path, include
 3 
 4 urlpatterns = [
 5     path(admin/, admin.site.urls),
 6     re_path(api/, include(api.urls)),
 7 ]
 8 
 9
10 from django.urls import path, re_path, include
11 from api import views
12 
13 urlpatterns = [
14     # 解析
15     re_path((?P<version>[v1|v2]+)/parser/$, views.ParserView.as_view()),
16

视图:

 1 from django.shortcuts import render, HttpResponse, reverse
 2 from rest_framework.views import APIView
 3 from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
 4 
 5 
 6 class ParserView(APIView):
 7     # parser_classes = [JSONParser, FormParser, MultiPartParser]
 8     """
 9     JSONParser:表示只能解析content-type:application/json头
10     FormParser:表示只能解析content-type:application/x-www-form-urlencoded头
11     MultiPartParser:表示只能解析content-type:multipart/form-data头
12     """
13 
14     def post(self, request, *args, **kwargs):
15         """
16         可以发json格式数据:
17         a.content-type:application/json b.{"name":"SB","age":18}
18         :param request:
19         :param args:
20         :param kwargs:
21         :return:
22         """
23         # 获取请求提交的值
24         print(request.data)
25         return HttpResponse(ParserView)

 全局配置:

1 REST_FRAMEWORK = {
2     # 解析
3     DEFAULT_PARSER_CLASSES: [rest_framework.parsers.JSONParser, rest_framework.parsers.FormParser],
4
5 }

 解析器源码分析

dispatch-->self.get_parsers()-->api_settings.DEFAULT_PARSER_CLASSES

 内置解析类

BaseParser   def parse(self, stream, media_type=None, parser_context=None):

JSONParser *************  常用

FormParser **************  常用

MultiPartParser *******     文件

FileUploadParser             文件

 

Django REST framework之解析器实例以及源码流程分析

标签:print   rto   cascade   get   foreign   json格式   ica   setting   源码   

原文地址:https://www.cnblogs.com/Alexephor/p/11306144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!