rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形
以UserInfo表登陆接口为例
ModelViewSet的用法十分简单,定义一个视图类,指定一个模型表,指定一个序列化类即可帮我们完成增删改查等功能
示例:
# 视图层 from app01.MySerailizers import UserSerializer
from rest_framework.viewsets import ModelViewSet class Login(ModelViewSet): # 继承ModelViewSet
# authentication_classes = []
# permission_classes = []
queryset = models.UserInfo.objects.all() # 指定模型表 这里的.all()加与不加不影响,内部源码有做处理
serializer_class = UserSerializer # 指定自己定义的序列化类
路由控制Route的使用方法也十分简单
步骤:
1、导入路由控制类
DefaultRouter可以帮我们产生4条路由,SimpleRouter可以帮我们产生2条路由
from rest_framework.routers import DefaultRouter,SimpleRouter
2、生成路由控制类对象并注册
router = DefaultRouter() # 实例化路由控制对象
router.register("login",views.Login) # 注册
3、编写路由,固定写法
from django.conf.urls import include urlpatterns = [
url(r'', include(router.urls)),
]
结合上例路由层:
from rest_framework.routers import DefaultRouter,SimpleRouter
from django.conf.urls import include router = DefaultRouter()
router.register("login",views.Login) urlpatterns = [
url(r'', include(router.urls)), ]
序列化组件层:
Mserailizers.py
from rest_framework import serializers
from app01 import models
from rest_framework.exceptions import ValidationError
class UserSerializer(serializers.ModelSerializer): # 这里用的是ModelSerailizer
class Meta():
model = models.UserInfo
fields = "__all__" def validated_username(self,value:str):
if not value:
raise ValidationError("用户名不能为空!")
elif len(value)<3:
raise ValidationError("用户名不能低于3位!")
elif value[0].isdigit():
raise ValidationError("用户名不能以数字开头!")
elif not value.isalpha():
raise ValidationError("用户名只能是字母数字下划线组成!")
else:
return value def validated_password(self,value):
if not value:
raise ValidationError("密码不能为空!")
else:
return value
关于Serailizers序列化组件详见:https://www.cnblogs.com/dongxixi/p/11130052.html
这样我们就快速完成了一个接口了,当然,这离实际应用还需要添加身份认证、权限认证、频率校验、版本控制等等,这些其实配置起来都一样简单,下面继续...
频率组件
频率组件
-限制用户访问次数
-使用:
-写一个类继承,最好单独开PY文件写
class Throttle(SimpleRateThrottle):
scope = 'lxx'
def get_cache_key(self, request, view):
return request.META.get('REMOTE_ADDR')
#返回什么值,就以什么做过滤,返回用户id,就以用户id做过滤
#return self.get_ident(request) 默认,以IP做限制 -在setting中配置:
'lxx':'3/minute'
-局部使用:
-在视图类中配置:
throttle_classes=[MyThrottle,]
-全局使用:
在setting中配置
REST_FRAMEWORK={
'DEFAULT_THROTTLE_CLASSES': ['app01.MyAuths.MyThrottle',], } -查找顺序:先从自己类中找-----》项目setting配置文件中找-----》drf默认的里面找
rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形的更多相关文章
- 基于Vue-cli 快速搭建项目
Vue-cli可以快速帮助我们创建一个项目,这是官方给我们提供的脚手架.下面我说一下vue-cli的使用方法. 一.准备工作 在使用vue-cli时,首先需要安装nodejs,npm,其次需全局安装v ...
- vue-cli webpack 快速搭建项目
一.安装vue npm install vue -g 二.用vue-cli快速搭建项目 //全局安装vue-cli npm install install -g vue-cli //创建一个基于web ...
- (转载) android快速搭建项目积累
android快速搭建项目积累 2016-04-05 20:07 519人阅读 评论(0) 收藏 举报 分类: android优化(8) Rx技术(5) 版权声明:本文为博主原创文章,未经博主 ...
- 使用vue-cli(vue脚手架)快速搭建项目
vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目.这篇文章将会从实操的角度,介绍整个搭建的过程. 1. 避坑前言 其实这次使用vue-cli的 ...
- 前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)
一:gulp优点: 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理: 插件高质 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作. 构建快速 利用 Node ...
- vue cli4.0 快速搭建项目详解
搭建项目之前,请确认好你自己已经安装过node, npm, vue cli.没安装的可以参考下面的链接安装. 如何安装node? 安装好node默认已经安装好npm了,所以不用单独安装了. 如何安装v ...
- httprunner(3)用脚手架快速搭建项目
前言 如何快速搭建一个httprunner项目呢?我们可以使用脚手架,脚手架就是自动地创建一些目录,形成一个项目的架构,不需要我们再手动的去创建 查看创建新项目的命令 先来查看一下帮助命令 httpr ...
- 寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
写在前面 现在已经是八月份了,我已经荒废了半年居多,不得不说谈恋爱确实是个麻烦的事,谈好了皆大欢喜,分手了就是萎靡不振,需要很长一段时间才能缓过来. 人还是要有梦想的,至于实现只不过是一个契机,但凡不 ...
- vue cli3.0快速搭建项目详解(强烈推荐)
这篇文章主要介绍下vue-cli3.0项目搭建,项目结构和配置等整理一下,分享给大家. 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cl ...
随机推荐
- 通过反射获取DataSource里数据源的账号密码
public Connection getDbConnection() { Connection conn = null; // 获得连接 DataSource ds = null; try { Co ...
- mysql 修改表结构以支持事务操作
修改表的类型为 INNODB 的 SQL: alter table category_ ENGINE = innodb; 查看表的类型的 SQL show table status from ...
- redis简单消息队列
<?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $redis->flushall(); $redis-& ...
- P1338 末日的传说,P1372 P1414 又是毕业季——贪心
一个1到n序列,合理排序逆序对数要求是m,而且字典序要求最小: 这个题,因为数字只能用一次,所以我们可以知道什么位置放什么数逆序对的个数会增加或减少多少: 先求出最多能产生的数量,每次先输出最小的数, ...
- [提权]CVE-2018-8120漏洞复现
0x01 漏洞名称 Windows操作系统Win32k的内核提权漏洞 0x02 漏洞编号 CVE-2018-8120 0x03 漏洞描述 部分版本Windows系统win32k.sys组件的NtUse ...
- Alphat【翻译】
翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/144625-alphat.html Wien3: 早上好 ...
- vue-cli构建路径加载资源出错问题
这份文档是对应 @vue/cli 3.x 版本的,官方文档https://cli.vuejs.org/zh/guide/ 项目打包执行npm run build的时候,打开dist目录的index.h ...
- 编程微语 2019-Summer
不支持重新生成不是好的代码生成器.重新生成就会覆盖手工修改,实用性大打折扣.相比工具,更接近玩具.2019-05-04 有很多个标准,各自为政,就相当于没有标准.目前地球的文档(如纯文本/Word/P ...
- java匿名内部类new(){}
匿名内部类:顾名思义,没有名字的内部类.表面上看起来它们似乎有名字,实际那不是它们的名字.当程序中使用匿名内部类时,在定义匿名内部类的地方往往直接创建该类的一个对象.匿名内部类的声明格式如下:new ...
- Java并发包异步执行器CompletableFuture
前言 CompletableFuture是对Future的一种强有力的扩展,Future只能通过轮询isDone()方法或者调用get()阻塞等待获取一个异步任务的结果,才能继续执行下一步,当我们执行 ...