RestFramework之认证组件
一、认证组件的介绍
对于认证,我们一般有三种方式,即cookie, session,token,
- cookie,是将信息存放在客户端(浏览器上),信息不安全;
- session,把信息放在服务器数据库中,但是要是信息量较大,对服务器的压力就会大大增加;
- token采用每次用户登陆后为其设置一个随机字符串,即token值,用户登陆之后,每次访问都带着这个token来访问,服务端只需要验证token值是否正确就可以,相对比较方便使用;
所以,我们使用token做认证;
二、认证组件的使用
首先需要编写模型类这里已经准备好了,主要是需要user表与token表。
class User(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
level = (
(1, 'delux'),
(2, 'vip'),
(3, 'svip')
)
user_level = models.IntegerField(choices=level) class UserToken(models.Model):
token = models.CharField(max_length=128)
user = models.OneToOneField('User', on_delete=models.CASCADE)
然后需要编写登陆视图
class Loginview(APIView):
# parser_classes = [JSONParser, FormParser]
def get(self, request):
return render(request, 'login.html') def post(self, request):
'''
code:
200:登陆成功
201:用户名或密码错误
202:其他错误
:param request:
:return:
'''
res = {'code': None, 'user': None, 'message': None}
try:
username = request.data.get('username')
password = request.data.get('password')
user_obj = User.objects.filter(username=username, password=password).first()
if user_obj:
token_str = str(uuid.uuid4()).replace('-', '')
UserToken.objects.update_or_create(user=user_obj, defaults={'token': token_str})
res['code'] = ''
res['user'] = username
res['message'] = '登陆成功'
res['token'] = token_str
else:
res['code'] = ''
res['message'] = '用户名或密码错误'
except Exception as e:
res['code'] = ''
res['message'] = e
# print(request.data)
# print(self.parser_classes)
# res['succsess'] = request.data
# res = json.dumps(res)
return Response(res)
准备工作做好之后我们来编写认证类,在编写之前需要导入相关的包与模型类
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import UserToken # model中的模型类
开始编写认证类,
class UserAuth(BaseAuthentication):
def authenticate(self, request):
# 我们模仿get请求页面
token = request.query_params.get("token") # 同request.GET.get("token")
# 在token表中查找有么有这次请求携带的token值
user_token_obj = models.UserToken.objects.filter(token=token).first()
if user_token_obj:
# 如果有值,说明是 正常用户
return user_token_obj.user, user_token_obj.token
# 返回 当前的用户对象,和当前的token值,这样源码就会帮我们赋值给request对象了,我们在后面的request中就可以使用了
else:
raise AuthenticationFailed("认证失败!")
视图类中只需要加入一行代码
authentication_classes = [UserAuth] # 认证类
这样我们的认证组件就完成了。
RestFramework之认证组件的更多相关文章
- rest-framework之认证组件
认证组件 认证简介 作用:校验是否登录 首先定义一个类,集成BaseAuthentication,写一个方法:authenticate,在方法内部,实证过程,认证通过,返回None或者两个对象(use ...
- rest-framework的认证组件
认证组件 1.登录认证(与组件无关): 首先要在model表内添加用户表和token表: from django.db import models # Create your models here. ...
- rest-framework:认证组件
一 认证简介: 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 二 局部使用 models.py class Use ...
- Django rest-framework框架-认证组件的简单实例
第一版 : 自己写函数实现用户认证 #models from django.db import models #用户表 class UserInfo(models.Model): user_type_ ...
- rest-framework框架——认证、权限、频率组件
一.rest-framework登录验证 1.models.py添加User和Token模型 class User(models.Model): name = models.CharField(max ...
- Django-restframework 源码之认证组件源码分析
Django-restframework 源码之认证组件源码分析 一 前言 之前在 Django-restframework 的流程分析博客中,把最重要的关于认证.权限和频率的方法找到了.该方法是 A ...
- DRF之认证组件源码解析
认证组件 认证的几种方法:cookie,session,token几种.但是session会使服务器的压力增大,所以我们经常使用的是token.获取唯一的随机字符串: 登陆携带token值的处理: ...
- Django:RestFramework之-------认证
3 restframework-认证 3.1APIView 认证: 认证是否已经登陆,如果已经登陆返回元组,如果没有登陆报错 源码流程: 执行dispatch方法: def dispatch(self ...
- RestFramework之权限组件
一.权限组件的使用 1.首先需要导入包 from rest_framework.permissions import BasePermission 2.编写权限类 class VipPermissio ...
随机推荐
- 教孩子学编程 Python
教孩子学编程 Python 目录 第1 章 Python 基础:认识环境 111 认识Python 312 用Python 编写程序 513 运行Python 程序 514 本章小结 615 编程 ...
- LeetCode_292. Nim Game
292. Nim Game Easy You are playing the following Nim Game with your friend: There is a heap of stone ...
- [ kvm ] 学习笔记 1:Linux 操作系统及虚拟化
1. 前言 一台计算机是由一堆硬件设备组合而成,在硬件之上是操作系统,操作系统与计算机硬件密不可分,操作系统用来管理所有的硬件资源提供服务,各个硬件设备是通过 总线 进行连接起来的: 在操作系统之上, ...
- angular2-cookie 如何升级到 ngx-cookie
angular2-cookie 如何升级到 ngx-cookie https://github.com/salemdar/angular2-cookie#readme
- Linux 指令表
Linux简介(了解) Linux介绍 Linux是类UNIX计算机的统称 Linux操作系统的内核也是Linux Linux是由芬兰大学生Linux Torvalds于1991年编写的 Linux这 ...
- eNSP模拟器OSPF单区域配置
实验拓扑图如下 下一步对终端设备与路由器的端口进行基本的ip设置 配置完成后要注意检查是否有小错误,不然会对后面的测试带来麻烦.在进行基础配置的时候一定要细心细心细心. 下一步我们就要进行OSPF的配 ...
- 在linux上cuda9.0 cudnn7.* 安装python3.6 tensorflow 1.5.1
链接:https://www.jianshu.com/p/bcf37d0e4e9b 为了入门机器学习的小伙伴能安装好工具,特制作此教程 按照 Anaconda 下载网站上的说明下载并安装 Anacon ...
- mogodb数据库简单的权限分配
mongdb数据库默认不需要权限认证,但为了安全起见,最好设置下需要权限认证,启动的时候设置auth=true即可. 推荐通过mongodb.conf配置文件的形式启动mongodb 进入mong ...
- [Oracle] - 使用32位 PLSQL(PL/SQL Developer)登陆64位Oracle失败之解决
配置环境 Oracle服务端oracle_winx64_12c_database.iso Oracle客户端instantclient-basiclite-nt-12.1.0.1.0.zip 集成开发 ...
- Python中使用列表的一部分——参考Python编程从入门到实践
处理列表中的部分元素——切片 1. 切片 players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[0: ...