0|1一、认证组件的作用

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

  • models.py
 
from django.db import models

# Create your models here.

class User(models.Model):
name = models.CharField(max_length=16)
pwd = models.CharField(max_length=16) class TokenUser(models.Model):
token = models.CharField(max_length=256)
user = models.OneToOneField(to='User',null=True,on_delete=models.SET_NULL,db_constraint=False) class Book(models.Model):
name = models.CharField(max_length=16)
price = models.IntegerField()
publish_date = models.DateField()
 
  • myserializer.py  序列化
 
from rest_framework import serializers
from app01 import models class BookSerializer(serializers.ModelSerializer):
class Meta:
model = models.Book
fields = '__all__' def validate(self, attrs):
return attrs
 

0|1二、自定义版登录验证组件

  • urls.py
 
"""blog_test URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01.views import BooksView, BookView,Login urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^Login/$', Login.as_view()),
url(r'^Books/$', BooksView.as_view()),
url(r'^Books/(?P<pk>\d+)/$', BookView.as_view()),
]
 
  • myauth.py  自定义验证类
 
from rest_framework.authentication import BaseAuthentication
from app01.models import TokenUser
from rest_framework.exceptions import AuthenticationFailed class MyAuthentication():
#验证过程
def authenticate(self, request):
token = request.GET.get('token')
token_user = TokenUser.objects.filter(token=token).first()
if token_user:
return token_user.user,token
else:
raise AuthenticationFailed('你还未登录,请先登录') def authenticate_header(self, request):
pass
 
  • views.py 视图类
 
from django.shortcuts import render
from rest_framework.response import Response # Create your views here.
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
from app01 import models
from app01.myserializer import BookSerializer
from rest_framework.views import APIView
from app01.myAuth import MyAuthentication class BooksView(ListCreateAPIView):
authentication_classes = [MyAuthentication] #加上验证的类,如果有多个,会从做到右依次验证
queryset = models.Book.objects.all()
serializer_class = BookSerializer class BookView(RetrieveUpdateDestroyAPIView):
authentication_classes = [MyAuthentication]
queryset = models.Book.objects.all()
serializer_class = BookSerializer import uuid
#登录
class Login(APIView):
def post(self,request):
name = request.data.get('name')
pwd = request.data.get('pwd')
user = models.User.objects.filter(name=name,pwd=pwd).first()
if user:
token = uuid.uuid4()
models.TokenUser.objects.update_or_create(user=user,defaults={"token":token})
response = {"status":100,"message":"登录成功"}
else:
response = {"status": 200, "message": "登录失败"}
return Response(response)
 

结果:登录后会在数据库中生成一个token,用get请求将其发送,观察各个请求的结果。

结果1:

结果2:

0|1三、继承BaseAuthentication的类的登录验证组件

  • myauth.py
 
from rest_framework.authentication import BaseAuthentication
from app01.models import TokenUser
from rest_framework.exceptions import AuthenticationFailed class MyAuthentication():
#验证过程
def authenticate(self, request):
token = request.GET.get('token')
token_user = TokenUser.objects.filter(token=token).first()
if token_user:
return token_user.user,token
else:
raise AuthenticationFailed('你还未登录,请先登录')
 

其他代码一致

0|1四、认证组件的使用方式

1.局部使用:在需要使用登录验证的视图类中写上变量  authentication_classes= [ 验证类名,]

2.全局使用:在settings.py配置文件中,加入 REST_FRAMEWORK = {‘DEFAULT_AUTHENTICATION_CLASSES’:'验证类的具体位置例如(app01.myauth.MyAuthenyicatin)'}

3.全局使用,局部禁用:在全局使用的基础上,在不需要验证的视图类中,将变量 authentication_classes 改为 [ ]  即 authentication_classes =  [ ]

0|1五、认证组件源代码分析

基于Django的Rest Framework框架的认证组件的更多相关文章

  1. 基于Django的Rest Framework框架的频率组件

    0|1一.频率组件的作用 在我们平常浏览网站的时候会发现,一个功能你点击很多次后,系统会让你休息会在点击,这其实就是频率控制,主要作用是限制你在一定时间内提交请求的次数,减少服务器的压力. modle ...

  2. 基于Django的Rest Framework框架的序列化组件

    本文目录 一 Django自带序列化组件 二 rest-framework序列化之Serializer 三 rest-framework序列化之ModelSerializer 四 生成hypermed ...

  3. 基于Django的Rest Framework框架的视图组件

    本文目录 一 基本视图 二 mixin类和generice类编写视图 三 使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView 四 使用 ...

  4. 基于Django的Rest Framework框架的分页组件

    本文目录 一 简单分页(查看第n页,每页显示n条) 二 偏移分页(在第n个位置,向后查看n条数据) 三 CursorPagination(加密分页,只能看上一页和下一页,速度快) 回到目录 一 简单分 ...

  5. 基于Django的Rest Framework框架的版本控制

    本文目录 一 作用 二 内置的版本控制类 三 局部使用 四 全局使用 五 示例 源码分析 回到目录 一 作用 用于版本的控制 回到目录 二 内置的版本控制类 from rest_framework.v ...

  6. 基于Django的Rest Framework框架的RESTful规范研究

    一.什么是RESTful规范 总的来说:RESTful规范就是一个非技术,人为约定的一个面向资源的架构理念. REST与技术无关,代表的是一种软件架构风格,REST是Representational ...

  7. 基于Django的Rest Framework框架的解析器

    本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有appli ...

  8. 基于Django的Rest Framework框架的url控制器

    本文目录 一 自定义路由(原始方式) 二 半自动路由(视图类继承ModelViewSet) 三 全自动路由(自动生成路由) 回到目录 一 自定义路由(原始方式) from django.conf.ur ...

  9. 基于Django的Rest Framework框架的响应器

    本文目录 一 作用 二 内置渲染器 三 局部使用 四 全局使用 五 自定义显示模版 回到目录 一 作用 根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件.用户请求URL:    ht ...

随机推荐

  1. .NET 时间轴:从出生到巨人

    自1995年互联网战略日以来最雄心勃勃的事业 —— 微软.NET战略, 2000年6月30日. 微软于2000年推出基于Windows操作系统的应用软件开发框架.NET,发展至今形成巨大的技术栈,涉及 ...

  2. es6一句话拾遗

    Symbol最大的作用就是用于消除魔术字符串: Set跟数组的最大区别,就是Set的成员都是唯一的,没有重复:(方法:add(value),has,delete,clear) Map跟对象的最大区别, ...

  3. golang数据结构之环形队列

    目录结构: circlequeue.go package queue import ( "errors" "fmt" ) //CircleQueue 环型队列 ...

  4. Linux中vim和vi编辑器的使用

    vim 和 vi 的关系: 可以将vim视作vi的高级版本,vim可以用颜色或下划线的方式来显示一些特殊信息.vim不止是文本处理软件,而可以说是一个程序开发工具.因为vim里面加入了很多额外功能,例 ...

  5. WildFly16.0配置数据源并测试

    目前网络上罕有近期版本的配置,本人经多次尝试网络中不同方式配置,在Testing Connection一步中尽皆失败后,查询官方文档未果,摸索出一条可行之路,在此分享于诸位朋友. [../wildfl ...

  6. Docker第二弹之常用命令

    Docker的常用命令 底层原理 Docker是如何工作的 Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从 ...

  7. 使用ZeroClipboard操作剪切板

    一.ZeroClipboard下载地址 点击下载 二.添加js引用 <script src="../Assets/js/jquery-1.8.3.min.js">< ...

  8. Redis深度历险,全面解析Redis14个核心知识点

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取. 传送门: ...

  9. 如何让Python爬虫一天抓取100万张网页

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...

  10. python数据挖掘之数据探索第一篇

    目录 数据质量分析   当我们得到数据后,接下来就是要考虑样本数据集的数据和质量是否满足建模的要求?是否出现不想要的数据?能不能直接看出一些规律或趋势?每个因素之间的关系是什么?   通过检验数据集的 ...