django rest-framework part1

2018-11-08  本文已影响15人  Fizz翊

1 FBV和CBV

FBV (function base views 基于函数的视图) 在视图里时候用函数请求处理,最开始使用的方法

url(r'^admin/',admin.函数名)

在views.py中定义函数来处理用户请求,函数中在定义请求方法的不同进行不同的处理。

CBV(class base views 基于类的视图) 在视图里使用类处理请求

ulr(r'^login',views.类名.as_view())
************
from django.views import View
class 类名(View):

在类中我们定义的get/post方法的名字不是我们自己定义的,而是按照固定的样式。

原理:

路由   url -> view方法 -> dispatch方法(反射执行其他:GET/POST/ 

2django中间件

中间件做过什么

CBV写法:

class StudentsView(View):
    @menthod_decorator(csrf_exempt)
    def dispatch(self,request,*args,**kwargs):
        return super(StudentsView,self).dispatch(request,*args,**kwargs)
    
    def get(self,request,*args,**kwargs):
        pass
    def post(self,request,*args,**kwargs):
        pass
    def put(self,request,*args,**kwargs):
        pass
    def delete(self,request,*args,**kwargs):
        pass

或者是

@method_decorator(csrf_exempt,name='dispatch')
class StudentsView(View):
    
    def get(self,request,*args,**kwargs):
        pass
    def post(self,request,*args,**kwargs):
        pass
    def put(self,request,*args,**kwargs):
        pass
    def delete(self,request,*args,**kwargs):
        pass

3 restfui规范

4 rest framework框架

认证

问题:有些api需要用户登录之后才能访问

Student.object.update_or_create(user=obj,defaults={'字段':更新的值})

存在就更新 不存在就创建

解决:

a.创建两张表

b.用户登录(返回token并保存到数据库)

c 认证流程原理

d 局部使用和全局使用

e 内部自带的验证方法

    1认证类,必须继承 from rest_framework.authentication import BaseAuthentication

认证方法:

from rest_framework import exceptions

class FirstAuthtication(BaseAuthentication):
    def authenticate(self,request):
        pass

    def authenticate_header(self,request):
        pass

class Authtication(BaseAuthentication):
    def authenticate(self,request):
        #获取token
        token = request._request.GET.get('token').first()
        #如果没有传递token
        if not token:
            raise exceptions.AuthenticationFailed('用户验证失败')
        return (token.usr,token)

    def authenticate_header(self,request):
        pass

单个视图使用

#在视图开始添加
authentication_classes = [Authtication,]

全局使用

Setttings.py

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": ['utiles.auth.FirstAuthtication', 'utiles.auth.Authtication']
}

如果在全局使用时某个视图不需要验证就在视图函数的开始添加

authentication_classes = [ ]

返回值

源码流程

权限

权限方法

from rest_framework.permissions import BasePermission
class MyPermission(BasePermission):
    def has_premission(self,request,view):
        if request.user.user_type != 3:
            return False
        return True
    
class OrderView(APIView):
    peimission_classes = [MyPermission,]
    
    def get(self,request,*args,**kwargs):
        pass
    

源码流程:

全局方法

Settings.py中设置

REST_FRAMEWORK = {
    "DEFAULT_PERMISSON_CLASSES":['utiles.auth.MyPermission']
}

如果在全局使用时某个视图不需要权限就在视图函数的开始添加

peimission_classes = []

局部方法 在指定的视图中间添加peimission

class OrderView(APIView):
    peimission_classes = [MyPermission,]
    
    def get(self,request,*args,**kwargs):
        pass

节流(访问评率控制)

版本

上一篇 下一篇

猜你喜欢

热点阅读