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默认的里面找        

 

posted @ 2019-07-08 15:51  希希大队长  阅读(767)  评论(0编辑  收藏  举报