首页 > 编程 > Python > 正文

Django Rest framework之认证的实现代码

2020-02-16 00:09:45
字体:
来源:转载
供稿:网友

django rest framework 官网

在学习django rest framework(下面简称drf)之前需要知道

对RESTful API设计有一定了解 对django框架有一定认识,本身drf就是基于django做的 对python面向对象编程有了解(drf会对一些原生的django类做封装)

一、前言

在学习drf之前的时候,先简单说一下需要的预备知识。在django中,路由匹配之后,会进行路由分发,这个时候会有两种选择模式的选择。也就是FBVCBV

1、FBV

fbv就是在url中一个路径对应一个函数

urlpatterns = [  url(r'^admin/', admin.site.urls),  url(r'^index/', views.index)]

在视图函数中

def index(request):  return render(request, 'index.html')

2、CBV

cbv就是在url中一个路径对应一个类,drf主要使用CBV

urlpatterns = [  url(r'^admin/', admin.site.urls),  url(r'^index/', views.IndexView.as_view())   # 执行类后面的as_view()方法,是父类里面的方法]

在视图函数中

from django.views import Viewclass IndexView(View):   # 以get形式访问会执行get函数,一般情况下获取数据  def get(self, *args, **kwargs):     return HttpResponse('666')     # 以post形式访问的话会执行post函数,一般情况下发送数据  def post(self, *args, **kwargs):     return HttpResponse('999')

我们在路由匹配的时候看到url(r'^index/', views.IndexView.as_view()),那这个as_view()是什么,既然我们在视图类中没有定义这个as_view()方法,就应该到父类(也就是IndexView的父类View)中看一下View。以下是django源码,路径是/django/views/generic/base.py,

class View:  http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] # 支持的各种http方法  def __init__(self, **kwargs):     pass  @classonlymethod  def as_view(cls, **initkwargs): # url路由匹配进入as_view方法    def view(request, *args, **kwargs):      return self.dispatch(request, *args, **kwargs) # 返回dispath方法    return view  def dispatch(self, request, *args, **kwargs): # dispath方法是drf的关键,dispath方法会通过反射,通过请求的方法,分发到各个视图类的方法中    pass

3、django的请求周期

因此根据CBV和FBVdjango的生命周期可以又两类

FBV:请求通过uwsgi网关,中间件,然后进入路由匹配,进入视图函数,连接数据库ORM操作,模板渲染,返回经过中间件,最终交给浏览器response字符串。

CBV:请求通过uwsgi网关,中间件,然后进入路由匹配,这里就与FBV有区别了,因为不再是试图函数而是视图类,说的详细一点,先经过父类View的dispath方法,进行请求方法的判断,在分发到视图类的方法,连接数据库ORM操作,模板渲染,返回经过中间件,最终交给浏览器response字符串。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表