zoukankan      html  css  js  c++  java
  • 认证权限频率自定义

    from rest_framework.authentication import BaseAuthentication
    from rest_framework.permissions import BasePermission
    from rest_framework.throttling import BaseThrottle,SimpleRateThrottle
    from django_redis import get_redis_connection
    from rest_framework import exceptions
    import pickle
    from app import models
    class Myauthentication(BaseAuthentication):
    def authenticate(self, request):
    token=request.GET.get('token')
    token=pickle.dumps(token)
    conn=get_redis_connection()
    conn_token=conn.get('token')
    if token==conn_token:
    user=models.User.objects.filter(id=pickle.loads(token)).first()
    return user,token
    raise exceptions.AuthenticationFailed('未通过验证')

    class Mypermissions(BasePermission):
    def has_permission(self, request, view):
    try:
    if request.user.user_type != 0:
    return 'success'
    else:
    return False
    except AttributeError:
    raise exceptions.AuthenticationFailed('未通过验证')
    class Mythrottling(SimpleRateThrottle):
    scope = 'uuu'
    # 'DEFAULT_THROTTLE_RATES': {
    # 'xxx': '10/day'
    # }
    def get_cache_key(self, request, view):
    return request.META.get('REMOTE_ADDR')


    视图层
    from django.shortcuts import render

    # Create your views here.
    from rest_framework.response import Response
    from rest_framework.views import APIView
    from app.models import *
    from app.Myserize import BookSerializers,PublishSerializers
    from rest_framework.viewsets import ModelViewSet,ViewSetMixin
    from django_redis import get_redis_connection
    import pickle
    from app.Myauth import *
    class Books(ViewSetMixin,APIView):
    # queryset=Book.objects.all()
    # serializer_class=BookSerializers
    authentication_classes = []
    permission_classes = []
    def post(self,request):
    book_ret=Book.objects.all()
    response={'statue': 1, 'msg': '获取成功'}
    response['data']=BookSerializers(book_ret,many=True).data
    return Response(response)




    class Publishs(ViewSetMixin,APIView):
    def post(self,request):
    response = {'statue': 1, 'msg': '新增成功'}
    print(request.data)
    model=PublishSerializers(data=request.data)
    if model.is_valid():
    model.save()
    response['data']=model.data
    else:
    response['data']=model.errors
    return Response(response)

    class Login(ViewSetMixin,APIView):
    authentication_classes = []
    permission_classes = []
    def post(self,request):
    name=request.data.get('name',None)
    pwd=request.data.get('pwd',None)
    user=User.objects.filter(name=name,pwd=pwd).first()
    if user:
    request.user=user
    conn=get_redis_connection()
    response = {'statue': 1, 'msg': '登陆成功'}
    token=pickle.dumps(str(user.id))
    conn.set('token',token)
    conn.expire('token',20)
    response['date']=user.id
    return Response(response)
    return render(request,'login.html')
    def get(self,request):
    return render(request, 'login.html')

  • 相关阅读:
    UML常见工具之Powerdesigner
    在webForm中WebRequest\WebClient\WebBrowser获取远程页面源码的三种方式(downmoon)
    忍不住了,我来说两句,从一道面试题说起
    《UML用户指南第二版》再次温读笔记(一)(downmoon)
    Database Project requires local SQL 2005 instance的解决方案(downmoon)
    JDBC Driver For SQL2000/2005/2008
    服务器更新dll后导致网站崩溃,重启iis也无效的一种解决方案(downmoon)
    白孩儿一个网上流传的故事[生活感悟]
    vs2008中js的语法提示及修正功能(downmoonn)
    Contoso 大学 2 – 实现基本的增删改查
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10660256.html
Copyright © 2011-2022 走看看