首页 > 其他分享 >django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件

django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件

时间:2023-05-24 20:55:30浏览次数:35  
标签:配置文件 request token user 组件 import class drf

django配置文件作用:

 

 

 

 drf 登录功能:

  view内:

from .models import UserInfo, UserToken
from rest_framework.viewsets import ViewSet
import uuid
from rest_framework.response import Response
from rest_framework.decorators import action


class UserView(ViewSet):
    @action(methods=['POST'], detail=False)
    def login(self, request):
        # 1.从request.data中拿出数据
        username = request.data.get('username')
        password = request.data.get('password')

        # 2.将拿出的数据在数据库中比对
        user = UserInfo.objects.filter(username=username, password=password).first()

        if user:
            # 3.判断是否正确,如果正确生成随机字符串
            token = str(uuid.uuid4())

            # 4.把随机字符串存到表中
            UserToken.objects.update_or_create(user=user, defaults={'token': token})
            return Response({'code': 100, 'msg': '登录成功', 'token': token})
        else:
            return Response({'code': 101, 'msg': '用户名或密码错误'})

  models内:

class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)


class UserToken(models.Model):
    token = models.CharField(max_length=64)
    user = models.OneToOneField(to=UserInfo, on_delete=models.CASCADE)

  url内:

from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import SimpleRouter

router = SimpleRouter()
router.register('user', views.UserView, 'user')

urlpatterns = [
    path('admin/', admin.site.urls),

    path('login/',include(router.urls))
]

drf认证组件:

  认证组件使用步骤(固定用法):

    1 写一个类,继承BaseAuthentication

    2 在类中写:authenticate

    3.在方法中,完成登录认证,如何不是登录的,抛异常

    4.如果是登录的,返回登录用户和token

      auth中:

from rest_framework.authentication import BaseAuthentication
from .models import UserToken
from rest_framework.exceptions import AuthenticationFailed


class LoginAuth(BaseAuthentication):
    def authenticate(self, request):
        # 校验用户是否登录--------->请求中携带后端给的token,就是登陆了

        # 取出token
        token = request.query_params.get('token')

        # 在数据库中根据token校验有没有数据
        user_token = UserToken.objects.filter(token=token).first()
        if user_token:
            user = user_token.user
            return user, token
        else:
            raise AuthenticationFailed('没有登录不能访问')

      view中:

from rest_framework.views import APIView
from .auth import LoginAuth


class BookView(APIView):
    authentication_classes = [LoginAuth, ]

    def get(self, request):
        return Response({'code': 100, 'msg': '成功', 'data': '很多数据'})

    5 在视图类中,使用认证类(局部使用)
      class BookView(APIView):
      authentication_classes = [LoginAuth, ]
    6 全局使用:
      REST_FRAMEWORK = {
      'DEFAULT_AUTHENTICATION_CLASSES': [
      'app01.auth.LoginAuth'
      ],

      }
    7 全局使用后,局部禁用
      class UserView(ViewSet):
        # 局部禁用
        authentication_classes = [ ]
    8 认证类的使用顺序
      -优先用视图类配置的
      -其次用项目配置文件
      -最后用drf默认的配置

  

drf权限组件:

   权限类的使用步骤
    1 写一个类,继承BasePermission
    2 在类中写方法:has_permission
      -如果有权限,就返回True
      -如果没有权限,就返回False
      -错误信息是self.message='字符串'


    permissions中:

from rest_framework.permissions import BasePermission


class Permissions(BasePermission):
    def has_permission(self, request, view):
        if request.user.user_type == 1:
            print(request.user.user_type)
            return True
        else:
            self.message = '您好,你没有权限'
            return False

    view中:

class BookDetailView(APIView):
    permission_classes = [Permissions]  # 局部禁用

    def delete(self, request, pk):
        return Response({'code': 100, 'msg': '删除成功'})

   setting中:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'app01.auth.LoginAuth'
    ],          # 全局使用认证功能
    'DEFAULT_PERMISSION_CLASSES': [
        'app01.permission .Permissions'
    ],          # 全局使用权限功能
}

    3 局部使用
      class BookDetailView(APIView):
        permission_classes = [AdminPermission, ]
    4 全局使用
      REST_FRAMEWORK = {
      'DEFAULT_PERMISSION_CLASSES': [
      'app01.permission.AdminPermission'
      ],

      }
    5 局部禁用
      class BookView(APIView):
      permission_classes = [ ]

频率组件:

   频率类的使用步骤
    1 写个类,继承:SimpleRateThrottle
    2 重写某个方法:get_cache_key
      -可以返回ip或用户id
      -返回什么,就以什么做频率限制


    throttling中:

from rest_framework.throttling import SimpleRateThrottle


class Mythrottling(SimpleRateThrottle):
    scope = 'lqz'

    def get_cache_key(self, request, view):
        # 返回客户端的ip地址
        ip = request.META.get('REMOTE_ADDR')
        print(ip)
        return ip

    setting中:

REST_FRAMEWORK = {

    'DEFAULT_THROTTLE_RATES': {
        'lqz':'3/m'
    },
}

    3 写一个类属性,随意命名一个名
      scope = 'lqz'
    4 在配置文件中配置:
      'DEFAULT_THROTTLE_RATES': {
      'lqz': '3/m' # 一分钟访问3次
      },

    5 全局用
      'DEFAULT_THROTTLE_CLASSES': [

      ],
    6 局部用
      class BookView(APIView):
      throttle_classes = [MyThrottle]

 

标签:配置文件,request,token,user,组件,import,class,drf
From: https://www.cnblogs.com/Hao12345/p/17429469.html

相关文章

  • jmeter--定时器组件
    工作中,用jmeter写接口测试脚本、性能测试脚本时,通常也会用到定时器组件,一般用的比较多的还是固定定时器、同步定时器。对于其他的定时器了解的不是特别深,为了更系统更深入的学习jmeter工具和工具中的定时器组件,自己对一些经常使用的定时器组件进行了学习、探索,并记录了一些知识点......
  • Java Web三大组件之Filter过滤器
    JavaWeb三大组件(Servlet、Filter、Listener)1、Filter过滤器概念生活中的过滤器:净水器,空气净化器,大山里的土匪等JavaWeb中的过滤器:当浏览器访问服务器资源时,过滤器就会拦截浏览器发过来的请求,实现一些特别的功能作用:一般用于完成通用的操作,如登录验证,身份验证,统一字符编码和敏感字......
  • spring-boot配置文件中server.context-path不起作用的解决方案
    背景:server.context-path不起作用简单说springboot项目路径默认是ip:port进入项目,通过在application配置文件添加server.context-path属性,可自定义上下文,如ip:port/server.context-path而springboot2.0之后,上下文的配置改为了server.servlet.context-path。  如果还是不懂可......
  • drf频率的使用
    频率,按ip地址,用户id,限制1写一个类,继承SimpleRateThrottle2写一个方法,get_cache_key-可以返回ip或者用户idreturnrequest.META.get("REMOTE_ADDR")-返回什么,就用什么做频率限制3写一个类属性scope='lqz'4在配置文件中配置'DEFAULT_THROTTLE_RATES':{......
  • vs2019打包程序时添加自定义的系统必备组件
     若要创建引导程序包,必须创建产品清单产品清单 product.xml包清单 package.xml 将文件复制到引导程序文件夹位置C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\SDK\Bootstrapper\Packages文件夹下    ......
  • vue2实现高度过渡效果,函数式组件
    1.首先创建src下创建utils文件夹,创建transition.js文件封装过渡组件consttransitionStyle='0.3sheightease-in-out'constTransition={//进入前设置el元素的transition,高度0beforeEnter(el){el.style.transition=transitionStyleel.style.height......
  • drf配置文件和三大认证
    0django转换器,配置文件作用#django转换器:django2.x以后,为了取代re_path -intpath('books/<str:name>')---->/books/1----》name=1---》当参数传入视图类的方法中-str-path-slug-uuid#django配置文件 1djagno项目要运行,优先执行配置文......
  • 【服务治理】基于SpringCloudAlibaba微服务组件的灰度发布设计(二)
    一.背景在上文中,灰度发布遇到了些问题,例如:1.动态修改Nacos配置中心的元数据信息,如何同步到Nacos注册中心对应服务的列表中2.管理后台业务调用其它服务灰度实例时的路由规则二.解决方案//TODO ......
  • 搞搞组件库
       ......
  • 单文件组件开发文档
    在大多数启用了构建工具的Vue项目中,我们可以使用一种类似HTML格式的文件来书写Vue组件,它被称为单文件组件(也被称为*.vue文件,英文Single-FileComponents,缩写为SFC)。顾名思义,Vue的单文件组件会将一个组件的逻辑(JavaScript),模板(HTML)和样式(CSS)封装在同一个文......