1. 创建用户表和 token表

class User(models.Model):
user =models.CharField(max_length=)
pwd =models.CharField(max_length=)
type=((,"VIP"),(,"SVIP"),(,"SSVIP"))
user_type = models.IntegerField(choices=type) class UserToken(models.Model):
user= models.OneToOneField("User")
token =models.CharField(max_length=)

2.创建登录类

from app01.models import User,UserToken

class LoginView(APIView):
"""
1000:成功
1001: 用户名和密码错误
1002:异常错误
"""
def post(self,request):
response = {"code": 100, "msg": None, "user": None}
try:
print(request.data)
user= request.data.get("user")
pwd =request.data.get("pwd") user =User.objects.filter(user=user,pwd=pwd).first() import uuid
random_str =uuid.uuid4() if user:
response["user"] =user.user
UserToken.objects.update_or_create(user =user,defaults={"token":random_str})
response["user"] =user.user
response["token"] =random_str
else:
response["code"]=1001
response["msg"]="密码错误" except Exception as e:
response["code"] =1002
response["msg"] =str(e) return Response(response)

3.设置认证类逻辑.

from app01.models import UserToken
from rest_framework.exceptions import AuthenticationFailed from rest_framework.authentication import BaseAuthentication class UserAuth(BaseAuthentication): msg = "认证失败"
def authenticate(self, request):
token = request.query_params.get("token")
usertoken= UserToken.objects.filter(token =token).first() if usertoken:
return usertoken.user, usertoken.token
else:
raise AuthenticationFailed("认证失败!")

 

4.1 应用局部认证

class BookView(APIView):
authentication_classes = [UserAuth]

def get(self,request):
"""
查看所有书籍
:param request:
:return:
"""
book_list=Book.objects.all()
serializer= BookSerializer(book_list,many=True)
return Response(serializer.data) def post(self,request):
"""
添加一条书籍
:param request:
:return:
"""
serializer=BookSerializer(data=request.data,many=True)
if serializer.is_valid():
serializer.save()#create操作.
return Response(serializer.data)
else:
return Response(serializer.errors)

  

4.2 设置全局认证模式

REST_FRAMEWORK={

'DEFAULT_AUTHENTICATION_CLASSES': (
'app01.utils.auth_class.UserAuth',
), }

验证.

Restframework 认证authentication 组件实例-1的更多相关文章

  1. Restframework 权限permission 组件实例-2

    1.在视图类里添加权限组件 class BookView(APIView): authentication_classes = [UserAuth] permission_classes = [SVI ...

  2. Restframework 分页器 Pagnation 组件实例-5

    分页逻辑 from rest_framework.pagination import PageNumberPagination class BookView(APIView): # authentic ...

  3. Restframework 频率throttle组件实例-3

    频率逻辑: from rest_framework.throttling import BaseThrottle import time VISIT_RECORD={} class VisitThro ...

  4. [转].net中的认证(authentication)与授权(authorization)

    本文转自:http://www.cnblogs.com/yjmyzz/archive/2010/08/29/1812038.html 注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧. ...

  5. .net中的认证(authentication)与授权(authorization)

    “认证”与“授权”是几乎所有系统中都会涉及的概念,通俗点讲: 1.认证(authentication) 就是 "判断用户有没有登录?",好比windows系统,没登录就无法使用(不 ...

  6. jQuery.uploadify文件上传组件实例讲解

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  7. drf06 认证Authentication 权限Permissions 限流Throttling

    为了方便接下来的学习,我们创建一个新的子应用 four python manage.py startapp four 因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并 ...

  8. django-rest-framework框架 第四篇 认证Authentication

    认证Authentication 什么是身份认证 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制. 视图的最开始处运行身份验证 在权限和限制检查发生之前,以及在允许 ...

  9. RestFramework之权限组件

    一.权限组件的使用 1.首先需要导入包 from rest_framework.permissions import BasePermission 2.编写权限类 class VipPermissio ...

随机推荐

  1. PHP下ajax跨域的解决方案之CORS

    由于安全的限制(同源策略,javascript只能访问同域名下的内容),如果需要进行跨域操作,那就免不了要进行跨域.   CORS(跨域资源共享,Cross-Origin Resource Shari ...

  2. cron,at的权限控制

      /etc/cron.deny存在 /etc/cron.deny不存在 /etc/cron.allow存在 只有/etc/cron.allow中列出的用户才能运行crontab -e:忽略/etc/ ...

  3. 面向对象设计模式纵横谈:Adapter 适配器模式(笔记记录)

    适配(转换)的概念无处不在 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口.生活中适配转换的例子太多了,也是设计模式里面比较容易理解的一个模式. 动机(Motivation) 在 ...

  4. spring mvc leaning

    解读 web.xml文件 <servlet>-----配置前端控制器的servlet <servlet-name>springMVC</servlet-name> ...

  5. Zookeeper 系列(五)Curator API

    Zookeeper 系列(五)Curator API 一.Curator 使用 Curator 框架中使用链式编程风格,易读性更强,使用工程方法创建连接对象使用. (1) CuratorFramewo ...

  6. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  7. css页面组件

    页面组件 1 元素的尺寸/边框/背景 1.1 css尺寸相关属性 height 高度 min-height 最小高度 max-height 最大高度 width 宽度 min-width 最小宽度 m ...

  8. 643. Maximum Average Subarray I

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  9. 2018.09.15 bzoj1977:次小生成树 Tree(次小生成树+树剖)

    传送门 一道比较综合的好题. 由于是求严格的次小生成树. 我们需要维护一条路径上的最小值和次小值. 其中最小值和次小值不能相同. 由于不喜欢倍增我选择了用树链剖分维护. 代码: #include< ...

  10. 2018.08.10 atcoder Median Sum(01背包)

    传送门 题意简述:输入一个数组an" role="presentation" style="position: relative;">anan. ...