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 ...
随机推荐
- File类的createNewFile()和mkdirs() mkdir()
createNewFile文件不存在则创建,存在则不创建并返回false,文件路径必须存在才可创建路径下的文件(注意它只能创建文件,即如果你给了/storage/emulated/0/hello/sn ...
- Poj 2104 K-th Number(主席树&&整体二分)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Case Time Limit: 2000MS Description You are wor ...
- [报错解决] k8s 删除pv一直处于terminating 两种解决方法
第一种 直接到etcd中删除 1.将所有的etcd中的key值取到一个keys.yam里面,便于查询 ETCDCTL_API=3 etcdctl get "" --from-key ...
- 怎么写一个带 bin 的 npm 包
只需要2步: 1. 在package.json 定义 一下 : { "name": "my-cli", ..., "bin": { &quo ...
- 使用dig进行DNS查询
dig全称Domain Information Groper,是一个DNS域名信息查询的工具,可以使用来查看域名解析的过程. dig是linux下自带的工具,如果要在windows下使用需要自行下载和 ...
- Asp.Net.Mvc+MEF+EF 项目 ,源码在GitHub ..希望对大家有所帮助
自己开源的 一个 Asp.Net + MEF+ EF 的 项目 . 供大家学习和使用, 点击进入GitHub
- Hadoop hadoop(2.9.0)---uber模式(小作业“ubertask”优化)
前言: 在有些情况下,运行于Hadoop集群上的一些mapreduce作业本身的数据量并不是很大,如果此时的任务分片很多,那么为每个map任务或者reduce任务频繁创建Container,势必会增加 ...
- Alpha冲刺(2/4)
队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11885037.html 作业博客 :https://edu.cnblogs.com/campus/f ...
- DevOps时代的软件过程改进探讨 杨振涛 云加社区 今天 作者:杨振涛,腾讯云TVP 本文从Jenkins,DevOps,云原生等视角探讨了软件过程改进在各个时代的挑战和价值,重新审视了SPI在软件开发和交付的效率和质量提升方面的意义
DevOps时代的软件过程改进探讨 杨振涛 云加社区 今天 作者:杨振涛,腾讯云TVP 本文从Jenkins,DevOps,云原生等视角探讨了软件过程改进在各个时代的挑战和价值,重新审视了SPI在软件 ...
- 设备树中的interrupts属性解析
interrupts属性会有两种不同的参数: 1. 带两个参数的情形 示例: interrupt-parent = <&gpio2>; interrupts = <5 1& ...