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默认的里面找
程序猿,要对自己狠一点!