认证组件

1.登录认证(与组件无关):

首先要在model表内添加用户表和token表:

from django.db import models

# Create your models here.
class User(models.Model):
name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32) class Token(models.Model):
user=models.OneToOneField("User",on_delete=models.CASCADE)
token=models.CharField(max_length=128)
import hashlib,time
def get_random_str(user):
ctime=str(time.time())
md5=hashlib.md5(bytes(user,encoding="utf-8"))
md5.update(bytes(ctime,encoding="utf-8")) return md5.hexdigest() class LoginView(APIView):
def post(self,request):
name=request.data.get("name")
pwd=request.data.get("pwd")
user=User.objects.filter(name=name,pwd=pwd).first()
res={"state_code":1000,"msg":None}
if user:
random_str=get_random_str(user.name)
toekn=Token.objects.update_or_create(user=user,defaults={"token":random_str})
res["token"]=random_str
else:
res["state_code"]=1001 #错误的状态码
res["msg"]="用户名密码错误!" return Response(json.dumps(res))

2.局部认证:

# Author:Jesi
# Time : 2018/10/6 18:14
from .models import *
from rest_framework.authentication import BaseAuthentication from rest_framework import exceptions
class TokenAuth(BaseAuthentication):
def authenticate(self,request):
'''函数名必须叫authenticate'''
# 验证条件根据需求设置(此示例为需要有token值)
token=request.GET.get("token")
token_obj=Token.objects.filter(token=token).first()
if not token_obj:
# 如果验证失败,需要跑出AuthenticationFailed错误
raise exceptions.AuthenticationFailed("验证失败!")
else:
# 如果验证成功,需要返回一个元组,分别是用户以及验证类的实例对象,然后内部会赋值给request.user和request.auth
return token_obj.user.name,token_obj.token def authenticate_header(self,request):
#加上上面的基础类继承,那么这个header方法就可以不用写了。
pass

在视图中只需要加一句就OK了。

class BookView(APIView):
authentication_classes = [TokenAuth]  # 注意,值为一个列表,可以放多个认证组件类名 
def get(self,request):
print(request.user) #token_obj.user.name
print(request.auth) #token_obj.token
book_list=Book.objects.all()
# bs=BookSerializers(book_list,many=True)
bs2=BookModelSerializers(book_list,many=True,context={'request': request})
# return Response(bs.data)
return Response(bs2.data)

这里打印的2个request.user,request.auth分别就是上面认证类返回的token_obj.user.name和token_obj.token。是一个元组。

3.全局配置:

将认证类放到一个util.py的一个额外文件下:

# Author:Jesi
# Time : 2018/10/6 18:14
from .models import *
from rest_framework.authentication import BaseAuthentication from rest_framework import exceptions
class TokenAuth(BaseAuthentication):
def authenticate(self,request):
token=request.GET.get("token")
token_obj=Token.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed("验证失败!")
else:
return token_obj.user.name,token_obj.token def authenticate_header(self,request):
#加上上面的基础类继承,那么这个header就可以不用写了。
pass

然后在settings里面进行一个配置:

REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.utils.TokenAuth"]
}

这样全局就都拥有了认证的组件。如果要查看书籍,作者等操作的时候需要带上token通过认证类的验证才可以。

http://127.0.0.1:8000/books/?token=7f9038f36213a9e6aa6c3ad51043d9d0

最后:

这样配置之后,每个视图类都要经过认证成功之后才能执行下一步,如果有某些方法不需要认证,如login函数,则需要在login函数中单独加入一个配置属性:

authentication_classes = [] #自己的类里有的话就调用此类的配置,为空既什么都不做

rest-framework的认证组件的更多相关文章

  1. restful framework之认证组件

    一.认证介绍 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 二.局部使用 (1)models层: class Us ...

  2. DRF Django REST framework 之 认证组件(五)

    引言 很久很久以前,Web站点只是作为浏览服务器资源(数据)和其他资源的工具,甚少有什么用户交互之类的烦人的事情需要处理,所以,Web站点的开发这根本不关心什么人在什么时候访问了什么资源,不需要记录任 ...

  3. Django REST Framework之认证组件

    什么是认证 认证即需要知道是谁在访问服务器,需要有一个合法身份.认证的方式可以有很多种,例如session+cookie.token等,这里以token为例.如果请求中没有token,我们认为这是未登 ...

  4. 基于django rest framework做认证组件

    先导入要用到的类 from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions ...

  5. rest framework认证组件和django自带csrf组件区别详解

    使用 Django 中的 csrf 处理 Django中有一个django.middleware.csrf.CsrfViewMiddleware中间件提供了全局的csrf检查.它的原理是在<fo ...

  6. Django高级篇三。restful的解析器,认证组件,权限组件

    一.rest=framework之解析器 1)解析器作用. 根据提交的数据.只解析某些特定的数据.非法数据不接收,为了系统安全问题 比如解析的数据格式有 有application/json,x-www ...

  7. 基于Django的Rest Framework框架的认证组件

    0|1一.认证组件的作用 在一个程序中有一些功能是需要登录才能使用的,原生Django中的auth组件可以用来解决这个认证问题,drf框架中也有对应的认证组件来解决这个问题. models.py   ...

  8. django rest framework 认证组件

    1.认证组件 1.认证组件 1.认证组件 1.认证组件

  9. Django REST framework —— 认证组件源码分析

    我在前面的博客里已经讲过了,我们一般编写API的时候用的方式 class CoursesView(ViewSetMixin,APIView): pass 这种方式的有点是,灵活性比较大,可以根据自己的 ...

  10. Django-rest framework框架的三大认证组件

    源码分析:三大认证组件的封装 组件的认证配置: 模型层:models.py class User(BaseModel): username = models.CharField(verbose_nam ...

随机推荐

  1. spyder 快捷键

    本文主要介绍了spyder的快捷键. 常用快捷键   快捷键 中文名称 Ctrl+R 替换文本 Ctrl+1 单行注释,单次注释,双次取消注释 Ctrl+4 块注释,单次注释,双次取消注释 F5 运行 ...

  2. LeetCode算法题-Pascal's Triangle II(Java实现)

    这是悦乐书的第171次更新,第173篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第30题(顺位题号是119).给定非负索引k,其中k≤33,返回Pascal三角形的第k ...

  3. 单页应用 - Token 验证

    单页应用 - Token 验证 转:https://juejin.im/post/58da720b570c350058ecd40f 第一次接触单页应用,记录公司项目关于Token验证知识. Token ...

  4. vue初识

    渐进式的JavaScript框架 vue react angualr 作者:尤雨溪 facebook 谷歌公司 文档:中文 建议:如果你想学好vue 1.看视频 初步的了解vue 2.学vue的课 时 ...

  5. 关于Swift中的指针的那些事

    前言 在Objective-c的世界中,一切对象都是指针.它是一种运行时语言,具体指针的对象类型将会在运行时,由系统分配.这样虽然自由,但是却并不安全. Swift世界就不一样了,Swift的世界很安 ...

  6. jvm运行时内存模式

    jvm内存模型 内存模型粗略划分为:堆和栈 详细划分为:堆,虚拟机栈,方法区,本地方法区,程序计数器 程序计数器: 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 ...

  7. UVA215-Spreadsheet Calculator(模拟+拓扑排序)

    Problem UVA215-Spreadsheet Calculator Accept:401  Submit:2013 Time Limit: 3000 mSec Problem Descript ...

  8. Oracle补丁术语介绍

    在使用Oracle的技术支持服务的时候,经常会遇到补丁相关的术语.现在对这些术语做些解释说明: Interim patch/One-off patch:是我们常说的小补丁,为了修复某(几)个Bug而发 ...

  9. 深度学习框架PyTorch一书的学习-第四章-神经网络工具箱nn

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 本章介绍的nn模块是构建与autogr ...

  10. day22 Pythonpython 本文xml模块

    一.xml介绍 xml是实现不同语言或者程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单.不过现在还有很多传统公司的接口主要是xml xml跟html都是标签语言 我们主要学习的 ...