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

最新文章

  1. 个人整理的一些web前端面试题
  2. c++中关于初始化型参列表的一些问题
  3. iOS 关于GCD中的队列
  4. mysql 批量更新与批量更新多条记录的不同值实现方法
  5. typeof instanceof
  6. 关于刷Sylvain/burst_ind分支的一些问题解答
  7. NHibernate分页
  8. Asp.net 上传图片添加半透明图片或者文字水印的方法
  9. android147 360 程序锁
  10. navagationController 的子控制器如何取消右滑返回
  11. 看完Andoird9.0 Pie的隐藏特性,我买了SSL证书
  12. 【Atcoder Grand Contest 011 F】Train Service Planning
  13. 从手机中导出apk
  14. 如何获取Azure AD tenant的tenant Id?
  15. 前端程序员必知的30个Chrome扩展-[转载]
  16. Linux系统教程 标准输入/输出和重定向
  17. 介绍Unity中相机的投影矩阵与剪切图像、投影概念
  18. 如何在vs2008安装64位编译器
  19. 【这些年】Linux C/C++软件开发用过的工具
  20. CentOS7和CentOS6的主要区别

热门文章

  1. MongoDB 建立与删除索引
  2. bzoj 4319: cerc2008 Suffix reconstruction 贪心
  3. jQuery相关方法9----事件相关
  4. [Luogu] 奶酪
  5. zoom:1的常见作用
  6. IDEA在线和离线安装lombok
  7. fcntl 函数
  8. Coroutine 协程
  9. uploadify HTTP 302 错误如何解决?
  10. lintcode刷题笔记(一)