Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装:
pip3 install djangorestframework
如果写了一个CBV的东西,继承了View。
# 继承Django里面View
class APIView(View):
pass # 订单View继承了APIView,相当于这个订单里面的功能就更多了。
class OrderView(APIView):
pass
restframework
from rest_framework.views import APIView
这个APIView继承View
这个View是Django里面的View
APIView多了些这么多功能
CBV的流程,URL-当前试图类-父类---dispatch
怎么加工request:
丰富了request一些功能,
authenticators是怎么来的---->调用self.get_authenticators(),self.get_authenticators()又是什么?
self.get_authenticators()应该先从,当前视图的类找,因为它里面传过去的self都是当前视图的类的对象。
没有才去父类找。它返回了个列表,列表里面有个列表生成式,如果self.authentication_classes是一个列表[Foo,Bar]里面表示两个类。对每个类进行了实例化。所以谁调用get_authenticators
返回的应该是[Foo,Bar]这个类的对象。
所以self.get_authenticators()是[Foo(),Bar()]
而self.authentication_classes是配置文件。是APIView里面的,从当前自己视图类找不到才去父类找,如果自己找到了呢?
如果自己找到了呢?
----
封装request
认证
实现认证
request.user
获取认证对象进行一步一步的认证
----
from django.views import View
from rest_framework.views import APIView
from rest_framework.authentication import BasicAuthentication
from rest_framework import exceptions
from rest_framework.request import Request class MyAuthentication(object):
def authenticate(self,request):
token = request._request.GET.get('token') #如果token不存在表示没有传没有登录抛个异常
if not token:
raise exceptions.AuthenticationFailed('您没有登录') return ('zrg',None) def authenticate_header(self,val):
pass
class DogView(APIView):
# cbv请求进来 URL---> view方法 ----->dispatch方法 做路由分发 authentication_classes = [MyAuthentication,] #表示获取到的是BasicAuthentication这个类的一个对象 def get(self,request,*args,**kwargs):
# self.dispatch
# print(request) #这个request已经不是Django原来的request了。而是调用了self.initialize_request(request, *args, **kwargs)这个方法加工之后的request
# 就是Django rest framework之后的request,这里面还包含原生的request, # return Request(
# request,
# parsers=self.get_parsers(),
# authenticators=self.get_authenticators(),
# negotiator=self.get_content_negotiator(),
# parser_context=parser_context
# )
response = {
'code':1000,
'msg':'successful'
} return HttpResponse(json.dumps(response),status=202) def post(self, request, *args, **kwargs): return HttpResponse('创建dog')
认证:
如果只是用只需要写一个类,获取用户名或密码去数据库校验,如果有继续往后走,没有就报异常。
如果想应用这个认证,在试图里要加上,以后不管URL发什么请求都必须认证成功才可以往下走。
print(request.user)这个user就是‘zrg'---->返回的元组的第一个值。
源码流程:
入口就是dispatch。
Django Rest framework 框架之认证
含restframework框架的生命周期是:请求进来---》dispatch才触发。
需求:如果用Django写的接口,这个接口需要控制有的人能访问有的人不能访问!通过什么来控制?
有些API需要用户登录成功才能访问,有些无需登录就能访问。
2.用户登录返回token并保存到数据库,以后他再来访问其他需要登陆之后才能访问的页面就必须通过我的认证才能通过。
from django.shortcuts import render
from django.http import JsonResponse # Create your views here. from rest_framework.views import APIView
from api import models def md5(user):
import hashlib
import time current_time = str(time.time()) m = hashlib.md5(bytes(user,encoding='utf-8'))
m.update(bytes(current_time,encoding='utf-8')) return m.hexdigest() class AuthView(APIView): def post(self,request,*args,**kwargs): response = {
'code':1000,
'msg':'None'
} try:
user = request._request.POST.get('username')
pwd = request._request.POST.get('password') obj = models.UserInfo.objects.filter(username=user,password=pwd).first() if not obj:
response['code']=1001
response['msg']='用户名或密码错误' # 为登录用户创建token(随机字符串,md5+时间戳+当前时间+当前用户名)
token = md5(user)
# 存在更新,不存在就创建
models.UserToken.objects.update_or_create(user=obj,defaults={'token':token})
# 返回token
response['token']=token except Exception as e:
response['code']=1002
response['msg']='请求异常' return JsonResponse(response)
from api import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/v1/auth/$', views.AuthView.as_view()),
]
1.创建了两张表。一张存用户信息,一张存用户登录成功之后的token。在视图里面我们去用户表根据他提供的用户名跟密码,为他生成token,生成token不仅给他我们还在数据库保存了一份。
from django.db import models # Create your models here. class UserInfo(models.Model):
user_type_choice = (
(1,'普通用户'),
(2,'VIP'),
(3,'SVIP'), )
user_type = models.IntegerField(choices=user_type_choice)
username = models.CharField(max_length=32,unique=True)
password = models.CharField(max_length=32) class UserToken(models.Model):
user = models.OneToOneField(to='UserInfo')
token = models.CharField(max_length=64)
#可以加时间加次数表示这段token最长用多久最多可以用几次。。。。
登陆过的人才能看。怎么验证他已经登录过了?---token。
创建一个类,把这个类加到我的类中,表示我们这个类可以应用认证规则了。
restframework还支持全局配置。
Django Rest framework 框架之权限组件
只要能通过认证,就在request里面赋值。比如说有不同的用户类型,就有权限之分。
权限怎么划分?在哪里做?
问题:不同视图不同权限可以访问。
基本使用:
源码流程:
梳理:
Django Rest framework 框架之节流(用户的访问频率控制)
某个用户它访问频率,一分钟最多访问6次,超过之后提示还有多少秒可以再次访问。
需求分析:
基本使用:
源码流程:
内置的
Django Rest framework 框架之版本处理
Django Rest framework 框架之认证使用和源码执行流程的更多相关文章
- rest_framework框架之认证功能的使用和源码实现流程分析
rest_framework框架之认证的使用和源码实现流程分析 一.认证功能的源码流程 创建视图函数 Note 创建视图函数后,前端发起请求,url分配路由,执行视图类,视图类中执行对应方法必须经过d ...
- Django REST framework框架介绍和基本使用
Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...
- Django Rest Framework框架 ---- url控制器
Django Rest Framework框架 ---- url控制器
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- Android 图片加载框架Picasso基本使用和源码完全解析(巨细无比)
写在之前 原本打算是每周更新一篇博文,同时记录一周的生活状态,但是稍微工作忙一点就顾不上写博客了.悲催 还是说下最近的状况,最近两周一直在接公司申请的计费点, 沃商店,银贝壳,微信等等,然后就是不停的 ...
- Django REST framework 之JWT认证
Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 H ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- Django REST framework 之 API认证
RESTful API 认证 和 Web 应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权 ...
随机推荐
- 更改django的时区
TIME_ZONE='Asia/Shanghai' datetime_obj.replace(tzinfo=(pytz.timezone("Asia/Shanghai"))).st ...
- 从 0 → 1,学习Linux该这么开始!
首先我们还是来普及以下概念,讲点虚的.现在是图形系统的天下,windows我们用了20多年.成功归功与它图形界面,你会点鼠标吗你会敲键盘吗?所以你会上网会聊天会玩游戏了.那么,0基础接触的Linux, ...
- EJB3.0之事务
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aboy123/article/details/24586803 一 事务是什么 1 事务的概念 1. ...
- git pull request 流程
git pull request 用于在 fork 官方 repo 到个人 github, 在本地修改后,向官方 repo 请求合并.在官方团队审查过代码后,就可以将自己所做的改动合并到官方 repo ...
- C. Nice Garland
题意: 就是有一串灯分别颜色是R,G,B.要求将每种颜色的灯相隔2个不同的灯.比如,RGR变成RGB才叫好看. 分析: RGB有6种排列,分别是:"RGB", "RBG& ...
- Oracle数据块深入分析总结
http: 最近在研究块的内部结构,把文档简单整理了一下,和大家分享一下.该篇文章借助dump和BBED对数据 库内部结构进行了分析,最后附加了一个用BBED解决ORA-1200错误的小例子.在总结的 ...
- git branch 分支操作
一.git分支命令 Git鼓励大量使用分支: 查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创 ...
- ASP.NET Core 集成测试
集成测试 集成测试,也叫组装测试或联合测试.在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试. 实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也 ...
- springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解
在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件, ...
- React-菜鸟学习笔记(二)
这篇新颖的东西是React的组件的封装和引用 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...