rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形
2024-09-01 13:49:47
以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默认的里面找
最新文章
- 个人整理的一些web前端面试题
- c++中关于初始化型参列表的一些问题
- iOS 关于GCD中的队列
- mysql 批量更新与批量更新多条记录的不同值实现方法
- typeof instanceof
- 关于刷Sylvain/burst_ind分支的一些问题解答
- NHibernate分页
- Asp.net 上传图片添加半透明图片或者文字水印的方法
- android147 360 程序锁
- navagationController 的子控制器如何取消右滑返回
- 看完Andoird9.0 Pie的隐藏特性,我买了SSL证书
- 【Atcoder Grand Contest 011 F】Train Service Planning
- 从手机中导出apk
- 如何获取Azure AD tenant的tenant Id?
- 前端程序员必知的30个Chrome扩展-[转载]
- Linux系统教程 标准输入/输出和重定向
- 介绍Unity中相机的投影矩阵与剪切图像、投影概念
- 如何在vs2008安装64位编译器
- 【这些年】Linux C/C++软件开发用过的工具
- CentOS7和CentOS6的主要区别