认证组件 权限组件

一、准备内容

# models
class User(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=64)
user_type = models.IntegerField(choices=((1, "超级管理员"), (2, "普通管理员"), (3, "2b用户")), default=3) # 跟User表做一对一关联
class Token(models.Model):
user = models.OneToOneField(to='User')
token = models.CharField(max_length=64)

二、认证逻辑

# MyAuths.py 自定义认证逻辑代码
class MyAuth(BaseAuthentication):
def authenticate(self, request):
# 写认证的逻辑
token = request.GET.get('token')
token_obj = models.Token.objects.filter(token=token).first()
if token_obj:
# 能够取到值,表示已经登录了
print("验证登录通过")
return token_obj.user, token_obj
else:
# 没有取到值,表示没有登录,往外抛异常
raise AuthenticationFailed('还没有登录呦')
# views.py 视图部分逻辑
from rest_framework.views import APIView
from app01 import models
import uuid # 用来生成唯一token
from django.core.exceptions import ObjectDoesNotExist
from rest_framework.response import Response from app01.MyAuths import MyAuth # Create your views here.
class Books(APIView):
# 局部认证, 源码中的 authentication_classes 部分,执行列表中的认证逻辑
# 执行优先级为:最高是此处定义的视图类中定义的 ---> 如果没有,就去项目settings.py中查找 ---> 都没有就选择rest_framework默认的配置文件中取
authentication_classes = [MyAuth, ] def get(self, request):
# request.user 就是当前登录用户
print(request.user.name) # 'AnonymousUser' object has no attribute 'name'
# 上面语句后面的错误,是因为原先将 authentication_classes = [MyAuth, ] 这句代码放进了get方法里面了
# print(request.user.name, type(request.user))
return Response('这个是验证过登录而返回的的信息!') class Login(APIView):
def post(self, request):
response = {'code': 100, 'msg': '登录成功'}
name = request.data.get('name')
pwd = request.data.get('pwd')
try:
user = models.User.objects.filter(name=name, pwd=pwd).get()
# 登录成功,需要将token写进token表中
# 生成一个唯一的token id
token = uuid.uuid4()
models.Token.objects.update_or_create(user=user, defaults={'token': token})
response['token'] = token
except ObjectDoesNotExist as e:
response['code'] = 101
response['msg'] = '用户名或者密码错误'
except Exception as e:
response['code'] = 102
response['msg'] = str(e)
return Response(response)





三、权限逻辑

# MyAuths.py 权限逻辑部分

class MyPermision(BasePermission):
message = '不是超级用户,查看不了'
def has_permission(self,request,view):
if request.user.user_type==1:
return True
else:
return False
# views.py 视图逻辑部分

class Publish(APIView):
# authentication_classes = [] 在setting.py里面设置了全局的token认证,
authentication_classes = [MyAuth, ]
permission_classes = [MyPermision, ] def get(self, request):
# print(request.user.name)
return Response('返回了所有出版社信息')

rest_framework 认证组件 权限组件的更多相关文章

  1. rest-framework组件 之 认证与权限组件

    浏览目录 认证组件 权限组件 频率组件 认证与权限组件 认证组件 局部视图认证 在app01.service.auth.py: class Authentication(BaseAuthenticat ...

  2. drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件

    RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...

  3. 第四章、drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件

    目录 RBAC 基于用户权限访问控制的认证 - Role-Based Access Control 三大认证组件 源码分析 一.认证组件 自定义认证类 使用: 二.权限组件 自定义权限类 三.频率组件 ...

  4. DRF(4) - 认证、权限组件

    一.引入 通过前面三节课的学习,我们已经详细了解了DRF提供的几个重要的工具,DRF充分利用了面向对象编程的思想,对Django的View类进行了继承,并封装了其as_view方法和dispatch方 ...

  5. rest-framework认证、权限组件

    认证组件: models class User(models.Model): username = models.CharField(max_length=32) password = models. ...

  6. rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件

    1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...

  7. drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

    三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...

  8. $Django Rest Framework-认证组件,权限组件 知识点回顾choices,on_delete

    一 小知识点回顾 #orm class UserInfo (models.Model): id = models.AutoField (primary_key=True) name = models. ...

  9. rest_framework 认证与权限

    一  认证 1.1先写个类(认证组件) from app01 import models from rest_framework import exceptions from rest_framewo ...

随机推荐

  1. Scrapy框架: middlewares.py设置

    # -*- coding: utf-8 -*- # Define here the models for your spider middleware # # See documentation in ...

  2. uoj175 【Goodbye Yiwei】新年的网警

    题目 胡乱分析 不妨定谣言的源头得到谣言的时刻为\(1\),那么其他人听到谣言的时间就是源头到这个点的最短路 假设\(i\)是谣言的源头,那么如果存在一个点\(j\)满足\(\forall k\in[ ...

  3. Hibernate4之注解零配置

    @Entity ,注册在类头上,将一个类声明为一个实体bean(即一个持久化POJO类) . @Table ,注册在类头上,注解声明了该实体bean映射指定的表(table). @Id用来注册主属性, ...

  4. react 16.3+ 新生命周期

    react 16.3版本出现了两个新的生命周期函数,并将逐渐废弃componentWillMount().componentWillReceiveProps().componentWillUpdate ...

  5. 2018-5-28-WPF-popup置顶

    title author date CreateTime categories WPF popup置顶 lindexi 2018-05-28 09:58:53 +0800 2018-2-13 17:2 ...

  6. Docker部署web环境之Lanmt

    2. 案例二 整套项目多容器分离通过docker-compose部署lanmt环境 详细的安装准备环境,省略,配置以及部署参考案例一即可 即可实现批量创建web,也可以实现多web共用一个php或my ...

  7. kernel: possible SYN flooding on port 80. Sending cookies

    1. sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn ...

  8. 界面设计微信小程序

    上一个周期将微信小程序的程序编完了,虽然还有很多需要修改的地方,大体已经完成.剩下的边角料以后再弄 这个周期来学习一下微信小程序的设计....好吧. 首先还是需要看一下微信的设计指南的.地址 http ...

  9. windows10 注销 锁定

    锁定,暂时离开电脑时使用. 跑程序,下载内容(注意有时要修改一些软件的设置)继续进行. 锁定电脑,这时就不要关机. 注销快于重启. 一个账号 后台跑程序 https://zhidao.baidu.co ...

  10. pro、pre、test、dev环境

    开发过程中四个环境分别是:pro.pre.test.dev环境,中文名字:生产环境.灰度环境.测试环境.开发环境 环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境. ...