用这个框架需要先安装:

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 框架之认证使用和源码执行流程的更多相关文章

  1. rest_framework框架之认证功能的使用和源码实现流程分析

    rest_framework框架之认证的使用和源码实现流程分析 一.认证功能的源码流程 创建视图函数 Note 创建视图函数后,前端发起请求,url分配路由,执行视图类,视图类中执行对应方法必须经过d ...

  2. Django REST framework框架介绍和基本使用

    Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...

  3. Django Rest Framework框架 ---- url控制器

    Django Rest Framework框架 ---- url控制器

  4. web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝

    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...

  5. web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍

    web前端Vue+Django rest framework 框架 生鲜电商项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...

  6. Android 图片加载框架Picasso基本使用和源码完全解析(巨细无比)

    写在之前 原本打算是每周更新一篇博文,同时记录一周的生活状态,但是稍微工作忙一点就顾不上写博客了.悲催 还是说下最近的状况,最近两周一直在接公司申请的计费点, 沃商店,银贝壳,微信等等,然后就是不停的 ...

  7. Django REST framework 之JWT认证

    Json Web Token 1.JWT简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.JWT 可以使用 H ...

  8. Django Rest framework 框架

    一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...

  9. Django REST framework 之 API认证

    RESTful API 认证 和 Web 应用不同,RESTful APIs 通常是无状态的, 也就意味着不应使用 sessions 或 cookies, 因此每个请求应附带某种授权凭证,因为用户授权 ...

随机推荐

  1. Nginx+Keepalived双机热备

    一.Keepalived Keepalived是保证集群高可用的服务软件.网络中优先级高的节点为master负责响应VIP的ARP包,将VIP和MAC地址映射关系告诉网络内其他主机,还会以多播的形式向 ...

  2. python六十四课——高阶函数练习题(一)

    1.lt = ['sdfasdfa', 'ewqrewrewqr', 'dsafa12312fdsafd', 'safsadf'] --> 得到长度列表2.tp = ('TOM', 'Lilei ...

  3. jquery append()与html()注意项

    项目中,涉及到有一部分js代码是从数据库中读取出来动态加载到一个<script>标签中的情况.使用到了jquery的append()和html()两个函数. 应用场景如下: 页面端,有一个 ...

  4. Insider Dev Tour(2018.06.28)

    时间:2018.06.28地点:北京金茂万丽酒店

  5. UIToolBar - 官方文档

    继承关系:UIToolBar -> UIView -> UIResponder -> NSObject. toolBar是一个工具栏,用于显示一个或多个按钮.其按钮叫做toolBar ...

  6. Java线程池实现原理与技术(ThreadPoolExecutor、Executors)

    本文将通过实现一个简易的线程池理解线程池的原理,以及介绍JDK中自带的线程池ThreadPoolExecutor和Executor框架. 1.无限制线程的缺陷 多线程的软件设计方法确实可以最大限度地发 ...

  7. 图解Redis之数据结构篇——简单动态字符串SDS

    图解Redis之数据结构篇--简单动态字符串SDS 前言     相信用过Redis的人都知道,Redis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用.这个对象系统包括字符串对象 ...

  8. 【Python】动手分析天猫内衣售卖数据,得到你想知道的信息

    大家好,希望各位能怀着正直.严谨.专业的心态观看这篇文章.ヾ(๑╹◡╹)ノ" 接下来我们尝试用 Python 抓取天猫内衣销售数据,并分析得到中国女性普遍的罩杯数据.最受欢迎的内衣颜色是什么 ...

  9. 华为交换机-SNMP配置

    1.1     SNMP基础配置 <switch>system-view 进入交换机的配置模式 [switch]snmp-agent 使能snmp服务 [switch]snmp-agent ...

  10. Python全栈开发之路 【第十六篇】:jQuey的动画效果、属性操作、文档操作、input的value

    01-动画效果 show 显示 概念:显示隐藏的匹配元素 语法:show(speed,callback) 参数: speed:三种预定速度之一的字符串('slow','normal','fast')或 ...