Django REST framework基础:视图和路由
DRF中的Request
在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等。
比如,区别于Django中的request从request.GET中获取URL参数,从request.POST中取某些情况下的POST数据。
在APIView中封装的request,就实现了请求数据的解析:
对于GET请求的参数我们通过request.query_params来获取。
对于POST请求、PUT请求的数据我们通过request.data来获取。
前戏
葫芦娃的故事
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi"
# Date: 2018/8/1 class Wa1(object):
name = "红娃" def f1(self):
print("力大无穷!") class Wa2(object):
name = '橙娃' def f2(self):
print('千里眼顺风耳!') class Wa3(object):
name = '黄娃' def f3(self):
print('钢筋铁骨!') class Wa4(object):
name = '绿娃' def f4(self):
print("会喷火!") class Wa5(object):
name = '青蛙' def f5(self):
print("会喷水!") class Jishuwa(Wa1, Wa3, Wa5):
name = '奇数娃' def ff(self):
print("我是{}, 我会:".format(self.name))
self.f1()
self.f3()
self.f5() class Oushuwa(Wa2, Wa4):
name = '偶数娃' def ff(self):
print("我是{}, 我会:".format(self.name))
self.f2()
self.f4() dbg = Jishuwa()
dbg.ff()
zhq = Oushuwa()
zhq.ff() # 直接定义一个基数娃
class Taowa(Wa1, Wa3, Wa5):
name = '套娃' def ff(self):
print("我是{}, 我会:".format(self.name))
self.f1()
self.f3()
self.f5() class Wawa(Taowa):
pass print("=" * 120)
a = Wawa()
a.ff()
前提
序列化
from rest_framework import serializers
from app01 import models class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = models.Comment
fields = "__all__"
extra_kwargs = {
"content": {"error_messages": {"required": "评论内容不能为空"}},
"article": {"error_messages": {"required": "文章不能为空"}}
} class SchoolSerializer(serializers.ModelSerializer):
class Meta:
model = models.School
fields = "__all__"
初生牛犊之徒手垒代码阶段
视图
class SchoolView(APIView):
def get(self, request, *args, **kwargs):
query_set = models.School.objects.all()
ser_obj = app01_serializers.SchoolSerializer(query_set, many=True)
return Response(ser_obj.data) class SchoolDetail(APIView):
def get(self, request, pk, *args, **kwargs):
obj = models.School.objects.filter(pk=pk).first()
ser_obj = app01_serializers.SchoolSerializer(obj)
return Response(ser_obj.data)
小试牛刀之使用混合类阶段
视图
class SchoolView(GenericAPIView, mixins.ListModelMixin):
queryset = models.School.objects.all()
serializer_class = app01_serializers.SchoolSerializer def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) class SchoolDetail(GenericAPIView, mixins.RetrieveModelMixin, mixins.CreateModelMixin):
queryset = models.School.objects.all()
serializer_class = app01_serializers.SchoolSerializer def get(self, request, pk, *args, **kwargs):
return self.retrieve(request, pk, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
路由
url(r'school/$', views.SchoolView.as_view()),
url(r'school/(?P<pk>\d+)/$', views.SchoolDetail.as_view()),
牛气冲天之使用通用类
视图
class SchoolView(ListCreateAPIView):
queryset = models.School.objects.all()
serializer_class = app01_serializers.SchoolSerializer class SchoolDetail(RetrieveUpdateDestroyAPIView):
queryset = models.School.objects.all()
serializer_class = app01_serializers.SchoolSerializer
路由
同上
牛牛牛牛之使用视图集
视图
class SchoolView(ModelViewSet):
queryset = models.School.objects.all()
serializer_class = app01_serializers.SchoolSerializer
路由
url(r'school/$', views.SchoolView.as_view({
"get": "list",
"post": "create",
})),
url(r'school/(?P<pk>\d+)/$', views.SchoolView.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})),
再来一牛之高级路由
视图
同上
路由
from rest_framework.routers import DefaultRouter router = DefaultRouter()
router.register(r'school', views.SchoolView)
urlpatterns += router.urls
赠图一张,祝君好运
Django REST framework基础:视图和路由的更多相关文章
- Django Rest framework 之 视图
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django rest framework 基础
01: Django rest framework 基础 1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational Stat ...
- Django rest framework (视图类详解)
官网:https://www.django-rest-framework.org/api-guide/viewsets/ 在django rest framework 视图中一共有N个类 第一类:AP ...
- Django Rest framework基础使用之 serializer
rest-framework文档地址:http://www.django-rest-framework.org/ Django Rest framework是一个非常强大且灵活的工具包,用于构建web ...
- Django Rest framework基础使用之View:APIView, mixins, generic, viewsets
先看一张图,对DRF的各个APIView,Mixin,Viewset等有个基本印象: 具体使用方法: 1.APIView: DRF 的API视图 有两种实现方式: 一种是基于函数的:@api_view ...
- Django REST framework基础:版本、认证、权限、限制
1 认证.权限和限制 2 认证 2.1 自定义Token认证 2.1.1 表 2.1.2 定义一个登录视图: 2.1.3 定义一个认证类 2.1.4 视图级别认证 2.1.5 全局级别 ...
- Django 的 一些基本操作:视图函数,路由配置
当安装好Django 通过上篇的随笔创好项目我们就能来耍下了, 但你会在你的项目中发现有一个settings.py 的文件,对的你肯定想到了需要配置,好了话不多说 Settings.py 找到下面的位 ...
- Django REST framework基础:解析器和渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...
- Django REST framework基础:认证、权限、限制
认证.权限和限制 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制.然后 权限 和 限制 组件决定是否拒绝这个请求. 简单来说就是: 认证确定了你是谁 权限确定你能不 ...
随机推荐
- 【从零开始自制CPU之学习篇02】555定时器
555定时器是一种集成电路芯片,常被用于定时器.脉冲产生器和震荡电路.在CPU制作中作为pc(程序计数器)的主要组成部分.以下是我购买的NE555实拍图: NE555的针脚示意图: 555定时器各针脚 ...
- AspNetCore Mvc 使用 PartialView
控制器: public IActionResult queryMongoDb(string dbname) { List<MongoDbModel> mdList = new List&l ...
- 获取Ip所在城市名与详细
//获取ip和地理信息 string url = "http://pv.sohu.com/cityjson"; WebRequest wRequest = WebRequest.C ...
- Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数 ...
- List-ArrayList集合基础增强底层源码分析
List集合基础增强底层源码分析 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 集合分为三个系列,分别为:List.set.map List系列 特点:元素有序可重复 有序指的是元素的 ...
- 【Java基础】【15Colletion集合】
15.01_集合框架(对象数组的概述和使用) A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. Student[] arr = new Stu ...
- JDBC事务与保存点 JDBC简介(七)
事务简介 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务是必须满足4个条件(ACID) 事务的原子性( A ...
- Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是 ...
- Html5 localStorage 缓存
1.客户端页面临时存贮数据变化多段,cookie ,session, data-xxx , hidden input 这些司空见惯不废话,我们采用 localStorage 特点:1.数据不会删除,除 ...
- JsonConvert.DeserializeObject反序列化
JObject ci = JsonConvert.DeserializeObject<JObject>(row); string s = ci["txtContent" ...