• restframwork组件的权限认证


    在一个视图类下重写  authentication_classes = [TokenAuth,]然后去认证类TokenAuth里面实现认证逻辑代码

    认证类代码块:

    1 class TokenAuth(BaseAuthentication):
    2     def authenticate(self,request):
    3         token=request.GET.get("token")
    4         token_obj=Token.objects.filter(token=token).first()
    5         if not token_obj:
    6             raise exceptions.AuthenticationFailed("用户验证失败,500")
    7         else:
    8             return token_obj.user,token_obj.token

    可以继承基类object,但是需要重写两个方法authenticate和authenticate_header

    from rest_framework.authentication import BaseAuthentication 导入模板类便于继承

    直接继承 BaseAuthentication 可以只重写前面一个

    视图类代码块:

     1 class BookShow(viewsets.ModelViewSet):
     2     authentication_classes = [TokenAuth,]
     3 
     4     queryset = Book.objects.all()
     5     serializer_class = BookModelSerializers
     6     def list(self, request, *args, **kwargs):
     7         print(request.user)
     8         print(request.auth)
     9         book_list=Book.objects.all()
    10         bs=BookModelSerializers(book_list,many=True,context={"request":request})
    11         return Response(bs.data)

     若想在全局实现认证或者权限:

    需要在settings下去配置REST_FRAMEWORK参数:

    1 REST_FRAMEWORK={
    2 "DEFAULT_AUTHENTICATION_CLASSES" : ["apk.utils.TokenAuth",],  #认证组件
    3 "DEFAULT_PERMISSION_CLASSES":["apk.utils.Permess"]            #权限组件
    4 }
    上面的apk.utils.TokenAuth 对应的就是自定义的认证组件类 apk.utils.Permess 以及权限组件类
    组件的具体实现逻辑:
     1 from rest_framework import exceptions
     2 from rest_framework.authentication import BaseAuthentication
     3 from .models import *
     4 
     5 class TokenAuth(BaseAuthentication):
     6     def authenticate(self, request):
     7         token=request.GET.get("token")     
     8         token_obj=Token.objects.filter(token=token).first()
     9         if not token_obj:
    10             raise exceptions.AuthenticationFailed("用户认证失败,500")
    11         else:
    12             return token_obj.user,token_obj.token
    13 
    14 
    15 class Permess(object):
    16     message="权限不够,请联系管理员!"     #定义未通过验证时的提示属性
    17     def has_permission(self,request,exam):
    18         user=request.user
    19         type=User.objects.filter(user=user).first().user_type
    20         if type==3:
    21             return True
    22         else:
    23             return False

    完成上述配置后,则全局下的所有表都需要认证和权限通过才可以访问了

    需要注意的是标红部分的方法名为配置名,不可改变

    部分不希望认证的数据表可以直接重写类下的配置:

    # authentication_classes = []
    # permission_classes = []
    *****************************************************
    关于解析器:
    默认rest_framework里面支持的常用解析器有三个 JSONParse FormParse MultiPartParser
    可以通过parser_classes=[JSONParse,]去指定使用哪个解析器去解析数据
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    对应url的封装:
    把之前手动写的url链接地址更换成它集成的四条url链接
    from django.conf.urls import url,include
    from rest_framework import routers
    routers=routers.DefaultRouter()  #实例化一个注册类工具对象
    routers.register("books",views.BookShow)   #将要对应的url和视图类 进行关联
    
    

    在urlpatterns里面进行加入

    1 urlpatterns = [
    2 
    3 url(r'',include(routers.urls)),
    4 
    5 ]

    就可以实现url的访问了




  • 相关阅读:
    npm 设置淘宝镜像
    JS字符串首字母大写
    类与面向对象基础(三)
    (转)php简单工厂模式实例讲解
    类与面向对象基础(二)
    类与面向对象基础(一)
    php连接数据库
    php中使用指针进行函数操作
    PHP基础之数组
    PHP正则表达式
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9936550.html
Copyright © 2020-2023  润新知