Django中的认证与权限 源码剖析

 rest_framework/request.py中部分认证和权限代码

   def _authenticate(self):"""Attempt to authenticate the request using each authentication instancein turn."""for authenticator in self.authenticators:try:user_auth_tuple = authenticator.authenticate(self)except exceptions.APIException:self._not_authenticated()raiseif user_auth_tuple is not None:self._authenticator = authenticatorself.user, self.auth = user_auth_tuplereturnself._not_authenticated()def _not_authenticated(self):"""Set authenticator, user & authtoken representing an unauthenticated request.Defaults are None, AnonymousUser & None."""self._authenticator = Noneif api_settings.UNAUTHENTICATED_USER:self.user = api_settings.UNAUTHENTICATED_USER()else:self.user = None

认证后将user存储到了request中,为了权限使用时候可以进行判断(红色)

class UserLoginPermission(BasePermission):
    def has_permission(self, request, view):

        return isinstance(request.user,User)

 

 

 

实例:

authentication.py

from django.core.cache import cache
from rest_framework.authentication import BaseAuthenticationclass TokenAuthentication(BaseAuthentication):def authenticate(self, request):token = request.query_params.get("token")user  = cache.get(token)if user:return user ,token

permissions.py

from rest_framework.permissions import BasePermissionfrom App.models import Userclass UserLoginPermission(BasePermission):def has_permission(self, request, view):return isinstance(request.user,User)def has_object_permission(self, request, view, obj):if  obj.b_author.id  == request.user.id:return True

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IQueryable和IEnumerable区别

IQueryable 和IEnumerable总结 1&#xff0c;IEnumerable<T> result (from t in context.Table order by t.Id select c).AsEnumerable().Take(3) 如果返回的是IEnumerable<T>类型的是预先把数据都加载在内存中在取出前三条数据 2&#xff0c;IQueryable<T&g…

xz压缩和解压缩

xz和gzip&#xff0c; bzip2用法是一样的。默认系统是没有安装这个压缩工具的&#xff0c;安装命令为&#xff1a;yum install -y xz语法&#xff1a;xz [-dz] filename-d&#xff1a;解压缩-z&#xff1a;压缩压缩时&#xff0c;可以加“-z”也可以不加&#xff0c;都可以压缩…

celery 学习笔记定时任务和异步任务

1、Celery加入异步和定时任务 Celery除了可以异步执行任务之外&#xff0c;还可以定时执行任务。在实例代码的基础上写个测试方法&#xff1a; import datetime import timefrom celery import shared_task from celery.schedules import crontab from celery.task import pe…

FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类

一. 概念 FBV&#xff08;function base views&#xff09; 顾名思义基于函数的视图类 CBV&#xff08;class base views&#xff09;基于类的视图类 至于区别呢? 我觉得只是写法上的不一样, 实现的结果都是一样的, 我比较喜欢用CBV模式, 因为在Django中内部帮我做了请求方式…

rpm查询

rpm -q 的用法&#xff1a;1、 rpm -qa 可以查看所有已经安装过的rpm包2、rpm -qf 文件名绝对路径&#xff0c;可以查看该文件由哪个包安装的3、 rpm -ql 包名&#xff0c;可以查看该包安装哪些文件4、 rpm -qi 包名&#xff0c;可以查看该包的详细信息查询一个包是否安装命令&…

IntelliJ idea学习资源

工作需要, 最近得从Eclipse转战到Idea, 找了些不错的学习资料: 1, 从eclipse上迁移过来的用户说明: https://www.jetbrains.com/help/idea/2016.3/eclipse.html 2, 极客学院的idea使用入门教程: http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-compositi…

linux下的安装:openssl

openssl简介 openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有&#xff1a;SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OC…

使用WinIO库实现保护模式下的IO和内存读写

问题已解决&#xff1a; 原因是函数的调用方式与WinIO中不一致&#xff0c;使用的时候漏掉了__stdcall。 函数原定义为&#xff1a; 在实际的GPIO读写中遇到以下问题&#xff1a; SetPortVal可正常写入&#xff0c;但是GetPortVal无法读取&#xff0c;程序崩溃&#xff0c;问题…

php 一些个 常用 函数

urlencode()函数原理就是首先把中文字符转换为十六进制&#xff0c;然后在每个字符前面加一个标识符%。urldecode()函数与urlencode()函数原理相反&#xff0c;用于解码已编码的 URL 字符串&#xff0c;其原理就是把十六进制字符串转换为中文字符json_decode(json,true); 输出的…

windows10中远程访问凭据不工作

远程同学电脑&#xff0c;发现输入账号密码还是不行&#xff0c;提示您的凭据不工作&#xff0c;问题解决&#xff1a;WinR---gpedit.msc网络访问----经典。转载于:https://blog.51cto.com/germa66/1934745

pycharm的 crtl + r 使用正则表达式进行 request-header格式更改

pycharm的 crtl r 使用正则表达式进行 request-header格式更改 复制粘贴之前 使用 ‘’‘ ’‘’ 保证格式不乱 改为正确格式

Android(组件大全)

ORM: Android GreenDao sqlite UI: Snackbar是Android支持库中用于显示简单消息并且提供和用户的一个简单操作的一种弹出式提醒。当使用Snackbar时&#xff0c;提示会出现在消息最底部&#xff0c;通常含有一段信息和一个可点击的按钮。Support Design Library转载于:https://w…

QT的常用对话框的应用

QMessageBox类提供了常用的弹出式对话框&#xff1a;提示、警告、错误、询问、关于对话框 需要添加头文件 #include <QMessageBox> MESSAGE 是要是显示的字符串 void Dialog::criticalMessage() { QMessageBox::StandardButton reply; reply QMessageBox::critical…

【spider】Tesseract机器视觉实现验证码识别

本文将重点介绍机器视觉的一个分支&#xff1a;文字识别&#xff0c; 介绍如何用一些 Python库来识别和使用在线图片中的文字 我们可以很轻松的阅读图片里的文字&#xff0c;但是机器阅读这些图片就会非常困难&#xff0c;利用这种人类用户可以正常读取但是大多数机器人都没法…

初识MVC

好多次听见别人说MVC&#xff0c;那么MVC到底是什么呢&#xff1f;今天来一探到底&#xff0c;揭开其神奇面纱。。 MVC介绍&#xff1a; MVC全名Model View Controller&#xff0c;是模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;-控制器&#xff08;Co…

【spider】selenium模拟点击斗鱼示例

from selenium import webdriver import timeurl https://www.douyu.com/directory/all# 动态html网页加载可能出现的问题&#xff1a;element is not attached to the page document # 标签没有及时的加载显示出来&#xff0c;如果加载时间不够&#xff0c;可能报错 # try e…

webpack简介

webpack是 前端资源模块化管理工具和打包工具&#xff1b;webpack本身只能识别模块引入&#xff0c;打包模块的功能&#xff1b;webpack能识别ES Moudule、common JS等模块规范一、现有模块系统1、CommonJS关键词&#xff1a;module.exports exports require特点&#xf…

【Python + Selenium】之JS定位总结

1、滚动条 driver.set_window_size(500,500) js "window.scrollTo(0,200)" #左&#xff1a;距左边横滚、右&#xff1a;距上边竖滚 driver.execute_script(js) 2、获取元素的值 button driver.find_element_by_css_selector("#su") #定位按钮 input…

BigDecimal类整除报错的解决方案

例如&#xff1a; BigDecimal num1 new BigDecimal("10"); BigDecimal num2 new BigDecimal("3"); BigDecimal num3 num1.divide(num2); 其实devide的函数定义如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;…

NodeJS中的require和import

ES6标准发布后&#xff0c;module成为标准&#xff0c;标准的使用是以export指令导出接口&#xff0c;以import引入模块&#xff0c;但是在我们一贯的node模块中&#xff0c;我们采用的是CommonJS规范&#xff0c;使用require引入模块&#xff0c;使用module.exports导出接口。…