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

解析器

我们都知道源生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             文件

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

时间: 2024-08-02 22:22:34

Django REST framework之解析器实例以及源码流程分析的相关文章

监听器初始化Job、JobTracker相应TaskTracker心跳、调度器分配task源码级分析

JobTracker和TaskTracker分别启动之后(JobTracker启动流程源码级分析,TaskTracker启动过程源码级分析),taskTracker会通过心跳与JobTracker通信,并获取分配它的任务.用户将作业提交到JobTracker之后,放入相应的数据结构中,静等被分配.mapreduce job提交流程源码级分析(三)这篇文章已经分析了用户提交作业的最后步骤,主要是构造作业对应的JobInProgress并加入jobs,告知所有的JobInProgressListen

Django rest framework(5) ---解析器

(1)api/urls.py # api/urls.py from django.urls import path,re_path from .views import UserView,PaserView urlpatterns = [ re_path('(?P<version>[v1|v2]+)/users/', UserView.as_view(),name = 'api_user'), path('paser/', PaserView.as_view(),), #解析 ] (2)vie

Django Rest Framework之解析器

基本代码结构 urls.py: from django.conf.urls import url, include from web.views.s5_parser import TestView urlpatterns = [ url(r'test/', TestView.as_view(), name='test'), ] views.py: from rest_framework.views import APIView from rest_framework.response impor

django rest framework 之 解析器

一.前言 在前端向后台发送form表单或者ajax数据的时候,django的content_type会拿到请求头中的Content-Type属性然后根据值进行解析. 将request.data中的值放到request.POST中需要满足两个条件 请求头要求: Content-Type: application/x-www-form-urlencoded PS: 如果请求头中的 Content-Type: application/x-www-form-urlencoded,request.POST

Django的View(视图)、settings源码的解析、模板层

一.FBV与CBV 视图函数并不只是指函数,也可以是类 FBV:基于函数的视图,类似面向函数式编程 CBV:基于类的视图,类似面向对象编程 研究解析render源码: render:返回html页面:并且能够给该页面传值 分析:FBV视图原理 from django.shortcuts import render,HttpResponse # Create your views here. from django.template import Template,Context # FBV解析

android-音乐播放器实现及源码下载(二)

本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲的功能 3.利用jsoup解析网页数据,从网络获取歌曲列表,同时实现歌曲和歌词下载到手机本地的功能. 4.通知栏提醒,实现仿QQ音乐播放器的通知栏功能. 涉及的技术有: 1.jsoup解析网络网页,从而获取需要的数据 2.android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现

Openstack liberty 创建实例快照源码分析2

这是创建云主机实例快照源码分析系列的最后一篇,在第一篇文章中分析了从镜像启动云主机,创建在线/离线快照的过程:本篇将分析从启动盘启动的云主机创建快照的过程,下面请看正文: 磁盘启动云主机,离线(在线)快照 nova-api处理过程 函数入口和前述一样,还是 nova/api/openstack/compute/servers.py/ServersController._action_create_image,下面一起来看看: def _action_create_image(self, req,

android-音乐播放器实现及源码下载(三)

本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲的功能 3.利用jsoup解析网页数据,从网络获取歌曲列表,同时实现歌曲和歌词下载到手机本地的功能. 4.通知栏提醒,实现仿QQ音乐播放器的通知栏功能. 涉及的技术有: 1.jsoup解析网络网页,从而获取需要的数据 2.android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现

android-音乐播放器实现及源码下载(四)

本系列博文,详细讲述一个音乐播放器的实现,以及从网络解析数据获取最新推荐歌曲以及歌曲下载的功能. 功能介绍如下: 1.获取本地歌曲列表,实现歌曲播放功能. 2.利用硬件加速感应器,摇动手机实现切换歌曲的功能 3.利用jsoup解析网页数据,从网络获取歌曲列表,同时实现歌曲和歌词下载到手机本地的功能. 4.通知栏提醒,实现仿QQ音乐播放器的通知栏功能. 涉及的技术有: 1.jsoup解析网络网页,从而获取需要的数据 2.android中访问网络,获取文件到本地的网络请求技术,以及下载文件到本地实现