认证

# 登录认证---》某个接口必须登录后才能房屋
# 登录接口---》登录成功返回随机字符串---》携带随机字符串【认证】 通过,再继续访问某个接口
# 读APIView源码时,三大认证---》视图类的方法之前执行的----》drf提供了很方便的写认证# 写一个登录接口-用户表,用户token表-前端传入用户名密码----》视图类---》登录方法---》校验用户名密码是否正确,如果正确 生成随机字符串存入数据库---》把随机字符串返回给前端# 随便写个接口---》登录后才能访问
# 写认证类-第一步:写一个类,继承BaseAuthentication-第二步:在类中重写authenticate方法u-第三步:在方法中做验证,如果通过,返回两个值,如果不通过,抛AuthenticationFailed的异常# 使用认证类-局部使用-->视图类中class BookView(APIView):authentication_classes = [LoginAuth,]-全局使用---》配置文件REST_FRAMEWORK = {# 全局使用认证类'DEFAULT_AUTHENTICATION_CLASSES':['app01.auth.LoginAuth',]}-局部禁用class BookView(APIView):authentication_classes = []# 前端调用接口时
http://127.0.0.1:8000/user/books?token=27954a0e-9b0b-442d-8aff-839ec9f70960

1.1登录接口

模型类

class User(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)
class UserToken(models.Model):token = models.CharField(max_length=32)  # 用户登录成功签发的随机字符串user = models.OneToOneField(to='User',on_delete=models.CASCADE)

路由

from rest_framework.routers import SimpleRouter
from .views import UserView,BookView
router=SimpleRouter()
router.register('user',UserView,'user')
urlpatterns = [
]
urlpatterns+=router.urls

视图类

class UserView(ViewSet):authentication_classes = []  # 局部禁用# 127.0.0.1:8080/user/user/login--->post@action(methods=['post', ], detail=False)def login(self, request):# 取出用户名密码---》去数据库查询---》有就登录成功(生成随机字符串存入数据),没有就登录失败username = request.data.get('username')password = request.data.get('password')user = User.objects.filter(username=username, password=password).first()if user:# 登录成功# 生成一个随机字符串---》uuid--》生成一个随机不重复的值token = str(uuid.uuid4())  # python 动态强类型# 存到UserToken表中---》两种情况:之前有了就更新,之前没有就新增# 有就更新,没有就修改# defaults=None, **kwargs:传入的去查询,如果能查到使用defaults给的更新UserToken.objects.update_or_create(user=user, defaults={'token': token})# UserToken.objects.update_or_create( defaults={'token': token},kwargs={'user':user})return Response({'code': 100, 'msg': '登录成功', 'token': token})else:return Response({'code': 101, 'msg': '用户名或密码错误'})

1.2认证类

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from .models import UserToken
class LoginAuth(BaseAuthentication):def authenticate(self, request):# 做验证,验证用户是否登录# 放到请求地址中/请求头中token=request.query_params.get('token')# 去数据库查 token在不在user_token=UserToken.objects.filter(token=token).first()if user_token:# 验证通过了,返回两个值,第一个值是当前登录用户,第二个值是tokenreturn user_token.user,tokenelse:# 验证失败raise AuthenticationFailed('小伙子,您没有登录,不能访问')

权限

# 登录成功了,但是有的接口区分权限,有的人有权限,有的人没权限
# 用户表新增一个 用户类型字段:超级管理员,普通管理员,普通用户# 权限类的写法-第一步:写一个类,继承BasePermission-第二步:重写has_permission方法-第三步:在has_permission中,进行权限的判断,如果有权限,返回True,如果没有权限,返回False,返回的中文提示信息,使用message字段标识#权限类的使用-局部使用-->视图类中class BookView(APIView):permission_classes = [PermissionAuth,]-全局使用---》配置文件REST_FRAMEWORK = {# 全局使用认证类 'DEFAULT_PERMISSION_CLASSES':['app01.auth.PermissionAuth',]}-局部禁用class BookView(APIView):permission_classes = []

补充

# python 是动态强类型语言
# go    是静态强类型语言
# java   是静态强类型语言---》隐士类型转换
# js     是动态弱类型语言# 动态:解释型语言
# 强弱指的是:数据类型强:不同类型之间不允许之间运算
# 弱类型:不同类型之间不需要转换可以之间运算# 健壮性----鲁棒性

Python认证-权限相关推荐

  1. DRF的版本控制,认证,权限和频率限制

    版本控制 源码解析 这个框架提供了一些些版本的控制方法就在,rest_framework.versioning里 如何使用: settings.py里 REST_FRAMEWORK = {# 默认使用 ...

  2. [解决方案]ln:无法创建符号链接‘ /usr/bin/python‘:权限不够

    ln:无法创建符号链接' /usr/bin/python':权限不够 写在前面的话 解决办法 写在前面的话 Ubuntu简单解决多版本python切换以及多版本pip对应问题,当我输入命令: ln - ...

  3. SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理

    SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理 参考文章: (1)SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理 (2)http ...

  4. python认证证书有哪些-python考试认证

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 除了之前热议的加入高考和中小学教育之外,现在连普通大学生也无法逃脱python的毒 ...

  5. python无法打开h5权限_解析PyCharm Python运行权限问题

    先通过 which python 获得 python 指令所在路径: $ which python /usr/bin/python 如上得到了其所在路径是 /usr/bin/python,因此我创建了 ...

  6. 详解比springSecurity和shiro更简单优雅的轻量级Sa-Token框架,比如登录认证,权限认证,单点登录,OAuth2.0,分布式Session会话,微服务网关鉴权

    文章目录 1. 技术选型 2. Sa-Token概述 2.1 简单介绍 2.2 登录认证 2.3 权限认证 3. 功能一览 4. Sa-Token使用 4.1 引入Sa-Token依赖 4.2 Sa- ...

  7. python 认证_Django 用户认证

    内置用户认证 django 的用户分为三类,匿名用户,普通用户,超级用户 普通用户是无法登录admin 后台的的,因此我们的普通视图使用这个用户来管理 超级用户是最高权限,可以登录admin后台,可以 ...

  8. 【Mongodb】用户和认证 权限总结

       开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库!    在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时a ...

  9. python开发信息系统权限设置_利用Python实现权限设置的详细教程

    一.私有化的实现 在Python中想定义一个类是比较简单的,比如要定义一个Person类,如下代码即可: 当然我们也可以给类添加相应的属性,比如Person的姓名,年龄,性别等,并且在new一个Per ...

最新文章

  1. 设计模式(四)简单工厂模式
  2. 谢烟客---------Linux之文件安全上下文及特殊权限位
  3. 从性能方面谈系统设计
  4. AT4995-[AGC034E] Complete Compress【树形dp】
  5. 硬件密码组件的硬件结构、作用及实现应用设计
  6. oracle中存储过程 =,oracle中的存储过程使用
  7. HTML作业-花店网页商城
  8. IntelliJ IDEA 如何从SVN导入项目 怎么部署 就是路劲和tomcat配置等等 步骤希望
  9. leetcode-189. Rotate Array
  10. ENVI5.3安装教程|带资源
  11. css中margin:0 auto没作用
  12. 力扣-530. 二叉搜索树的最小绝对差
  13. Tensorflow API(一)
  14. 使用PS实现简单的名片制作
  15. javascript编写奇迹mu原版(含服务端)(5)前端测试可行性
  16. 为什么很多公司都在招测试开发?
  17. 长歌行 宋 郭茂倩收编的《乐府歌词》汉代民间诗歌
  18. 安装 pymysql 的方法
  19. ahpu程序设计协会蓝桥选拔赛题解
  20. 航天信息管理软件无法连接服务器,航天信息客户端怎样连接服务器

热门文章

  1. Ashton Kutcher 确认主演斯蒂夫•乔布斯传记电影
  2. Delphi打开浏览器
  3. 中国净水设备市场需求前景分析及投资策略研究报告2022年版
  4. 使用计算机上存储的配置文件,Onedrive使用教程 如何存储文件到onedrive及管理
  5. HTML5+CSS3移动商城-首页
  6. 遗传算法python(含例程代码与详解)
  7. 互联网公司的应届生情况
  8. iOS 关于APP侵权被下架问题
  9. mac 终端下载python库方法
  10. 攻防世界misc——适合作为桌面壁纸