以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、路由控制、序列化组件快速搭建项目雏形的更多相关文章

  1. 基于Vue-cli 快速搭建项目

    Vue-cli可以快速帮助我们创建一个项目,这是官方给我们提供的脚手架.下面我说一下vue-cli的使用方法. 一.准备工作 在使用vue-cli时,首先需要安装nodejs,npm,其次需全局安装v ...

  2. vue-cli webpack 快速搭建项目

    一.安装vue npm install vue -g 二.用vue-cli快速搭建项目 //全局安装vue-cli npm install install -g vue-cli //创建一个基于web ...

  3. (转载) android快速搭建项目积累

    android快速搭建项目积累 2016-04-05 20:07 519人阅读 评论(0) 收藏 举报  分类: android优化(8)   Rx技术(5)  版权声明:本文为博主原创文章,未经博主 ...

  4. 使用vue-cli(vue脚手架)快速搭建项目

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目.这篇文章将会从实操的角度,介绍整个搭建的过程. 1. 避坑前言 其实这次使用vue-cli的 ...

  5. 前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)

    一:gulp优点: 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理: 插件高质 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作. 构建快速 利用 Node ...

  6. vue cli4.0 快速搭建项目详解

    搭建项目之前,请确认好你自己已经安装过node, npm, vue cli.没安装的可以参考下面的链接安装. 如何安装node? 安装好node默认已经安装好npm了,所以不用单独安装了. 如何安装v ...

  7. httprunner(3)用脚手架快速搭建项目

    前言 如何快速搭建一个httprunner项目呢?我们可以使用脚手架,脚手架就是自动地创建一些目录,形成一个项目的架构,不需要我们再手动的去创建 查看创建新项目的命令 先来查看一下帮助命令 httpr ...

  8. 寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目

    写在前面 现在已经是八月份了,我已经荒废了半年居多,不得不说谈恋爱确实是个麻烦的事,谈好了皆大欢喜,分手了就是萎靡不振,需要很长一段时间才能缓过来. 人还是要有梦想的,至于实现只不过是一个契机,但凡不 ...

  9. vue cli3.0快速搭建项目详解(强烈推荐)

    这篇文章主要介绍下vue-cli3.0项目搭建,项目结构和配置等整理一下,分享给大家. 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cl ...

随机推荐

  1. Java上传大文件夹

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

  2. 心跳(纯代码制作心形,animation动画)

    思路:利用两个长方形(比例是2:3 | 3:2)可以合成心形,然后利用动画,缩放大小实现心跳(纯代码),效果如下: <body> <div></div> </ ...

  3. bzoj 3398

    f[i]表示最后一个是公牛的方案数,=sigma(f[j])(j<i-k) 然后前缀和优化即可. #include <cstdio> #include <cstdlib> ...

  4. TensorFlow(十八):从零开始训练图片分类模型

    (一):进入GitHub下载模型-->下载地址 因为我们需要slim模块,所以将包中的slim文件夹复制出来使用. (1):在slim中新建images文件夹存放图片集 (2):新建model文 ...

  5. P3688 [ZJOI2017] 树状数组 【二维线段树】

    题目描述:这里有一个写挂的树状数组: 有两种共\(m\)个操作: 输入\(l,r\),在\([l,r]\)中随机选择一个整数\(x\)执行\(\text{Add}(x)\) 输入\(l,r\),询问执 ...

  6. jQuery的ajax请求express服务器返回数据

    html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. maven 聚合工程 > 坑总结

    maven聚合工程子项目无法构建:父工程未 install tomcat可以运行,maven 无法编译报错,检查是否添加红色语句: <dependency> <groupId> ...

  8. 为List<T>中的T进行参数校验

    1.现在前端发送了一个POST请求,他的Data是一个数组,而不是对象(jsonObj的值两侧是中括号). var jsonObj = [{'id':11, 'name':'叵'}, {'id':12 ...

  9. Python的十种常见算法

    十种排序算法 1. 常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序: ​ a. 交换类排序(快速排序.冒泡排序) ​ b. 插入类排序(简单插入排序.希尔排序) ​ c. ...

  10. Java 面向对象(十一)

    常用类之集合 集合:就是用来存放数据的一个容器. 数组和集合的区别 (1)数组能存基本数据类型和引用类型:集合当中只能存放引用数据类型,直接放基本数据类型,也会自动帮你装箱(把基本数据类型转成对象), ...