【Django-ninja】使用Django ninja 进行auth鉴权

 1. 使用django_auth

django_auth其实就是SessionAuth类鉴权方式。

使用Django自带的auth模块,通过/login实现登录,然后可以访问/api_withdjango_auth。

通过/logout可以退出登录。

from django.contrib import authclass LoginSchema(Schema):user:strpassword: str@demo_api.get('/login')
def login(request, login_in: LoginSchema=Query(...)):user = auth.authenticate(request, username=login_in.user, password=login_in.password)if user:auth.login(request, user)return {"message": str(request.session), 'request': str(request)}else:return {"message": "fail"}@demo_api.get('/logout')
def logout(request):auth.logout(request)return {"message": "logout", "session": str(request.session), 'request': str(request)}@demo_api.get("/django_auth", auth=django_auth)
def api_with_django_auth(request):return {"data": request.session[auth.HASH_SESSION_KEY], "auth": f"{request.auth}"}


2.其他所有内置的鉴权方式


__all__ = ["APIKeyCookie","APIKeyHeader","APIKeyQuery","HttpBasicAuth","HttpBearer","SessionAuth","SessionAuthSuperUser","django_auth",
]

3. 自定义鉴权方式

"auth="参数接收一个Callable对象。如果这个对象的返回结果可以转换成布尔类型的True值时,NinjaAPI即可通过鉴权。同时这个值也会被赋给request.auth。

def ip_whitelist(request):if request.META["REMOTE_ADDR"] == "8.8.8.8":return "8.8.8.8"@api.get("/ipwhitelist", auth=ip_whitelist)
def ipwhitelist(request):return f"Authenticated client, IP = {request.auth}"

4.多个鉴权器

逐个鉴权器进行鉴权,有一个通过即可通过。 

from ninja.security import APIKeyQuery, APIKeyHeaderclass AuthCheck:def authenticate(self, request, key):if key == "supersecret":return keyclass QueryKey(AuthCheck, APIKeyQuery):passclass HeaderKey(AuthCheck, APIKeyHeader):pass@api.get("/multiple", auth=[QueryKey(), HeaderKey()])
def multiple(request):return f"Token = {request.auth}"


 

 

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

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

相关文章

[职场] 英语面试自我介绍 #微信#笔记#媒体

英语面试自我介绍 英语面试自我介绍1 I am very happy to introduce myself here.I was born in Liaoning Province.I graduated from Nankai University and majored in International Trade.I like music and reaing books,especially economical books.It is my honor to ap…

测试人员的自我修养

QAS:是负责检查和评估软件产品质量的专业人员,他们通过执行一系列测试来确保软件产品的功能、性能和安全性符合设计要求。 当产品上线后,有 bug: “测试为什么没有测试发现这个问题?肯定是测试的责任!” 当产品上线…

LabVIEW CVT离合器性能测试

介绍了CVT(连续变速器)离合器的性能测试的一个应用。完成了一个基于LabVIEW软件平台开发的CVT离合器检测与控制系统,通过高效、准确的测试方法,确保离合器性能达到最优。 系统采用先进的硬件配合LabVIEW软件,实现了对…

C语言在Visual Studio 2010环境下使用<regex.h>正则表达式函数库

在Visual Studio 2010环境下&#xff0c;如果C语言想要使用<regex.h>头文件进行正则表达式匹配&#xff0c;则需要pcre3.dll这个动态链接库&#xff0c;可以去网上下载。 下载的网址是&#xff1a;Pcre for Windowspcre {whatisit}https://gnuwin32.sourceforge.net/pac…

[Python] scikit-learn中数据集模块介绍和使用案例

sklearn.datasets模块介绍 在scikit-learn中&#xff0c;可以使用sklearn.datasets模块中的函数来构建数据集。这个模块提供了用于加载和生成数据集的函数。 API Reference — scikit-learn 1.4.0 documentation 以下是一些常用的sklearn.datasets模块中的函数 load_iris() …

机器学习算法之分类和回归树(CART)

分类和回归树(Classification and Regression Trees,CART)是一种强大的机器学习算法,用于解决分类和回归问题。本篇博文将深入介绍CART算法的工作原理、应用领域以及Python示例。 算法背景 CART算法最早由Leo Breiman等人于1984年提出,它是一种决策树算法,用于将数据集…

Linux下安装anaconda并配置环境变量

1、anaconda安装&#xff1a; 将下载anaconda镜像sh&#xff0c;然后用sh命令执行安装&#xff1a;sh Anaconda3-2021.05-Linux-x86_64.sh 一直回车或yes&#xff0c;默认安装即可 -----------------------------------------------------------------------------------------…

MySQL JSON数据类型使用和说明

目录 1. JSON数据类型简介 2. 创建含有JSON列的表 3. 插入JSON数据 4. 查询JSON数据 5. 更新JSON数据 6. JSON数据类型的限制 7. JSON函数和操作符 8.JSON数据类型性能考量 9. 使用场景推荐 3. 总结建议 1. JSON数据类型简介 MySQL从5.7版本开始引入了JSON&#xff0…

2021-09-23 51蛋骗鸡单按键计数实现不同功能不同写法占用空间比较

缘由小容量的单片机芯片怎么提高存储空间利用率? - 24小时必答区 https://bbs.csdn.net/topics/600865890 #include "reg52.h" sbit kP2^0; void main() {unsigned char a0,xd0;while(1){if(k0&&xd0){a;while(k0);}if(a1)P0~1;else if(a2)P0~3;else if(a3)…

React16源码: React中详解在渲染阶段Suspend的源码实现

Suspend 挂起详解 1 &#xff09;概述 在react的更新过程当中&#xff0c;它的任务是可以被挂起的&#xff0c;也就是 Suspend关于 Suspend 字面意思就是挂起在某次更新的任务更新完成之后&#xff0c;暂时不提交 在 react更新中&#xff0c;分为两个阶段&#xff0c;首先是re…

16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web

在Java Web开发领域&#xff0c;JavaServer Pages&#xff08;JSP&#xff09;作为一种动态网页技术&#xff0c;在构建高效Web应用程序中发挥着核心作用。本文将详细介绍JSP的基础概念&#xff0c;包括其基本结构、注释方法、Scriptlet的使用、Page指令元素的功能以及Include包…

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法…

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(下)

目录 沈阳市的空气质量 华夫图 柱状图 总结 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市&#xff0c;使用华夫图和柱状图分析各个城市的情况 沈阳市的空气质量 华夫图 import numpy as np import pandas as pd import matplotlib.pyplot as plt …

Servlet(java web基础篇)

Servlet&#xff08;java web基础篇&#xff09; Servlet是Java提供的一门动态web资源开发技术,不同的用户访问看到的效果不一样。Servlet是lavaEE规范之一&#xff0c;其实就是一个接口&#xff0c;将来我们需要定义Servlet类实现Servlet:接口&#xff0c;并由web服务器运行S…

TorchVision的使用方法、更改默认路径

TorchVision的使用 1. 转换和增强图像 torchvision.transforms.v2 参数作用Resize将输入调整为给定大小RandomShortestSize随机调整输入的大小RandomResize随机调整输入的大小RandomCrop在随机位置裁剪输入RandomResizedCrop裁剪输入的随机部分并将其调整为给定大小RandomIoU…

Java生成微信小程序二维码的方式有哪些?

大家好我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01;今天我们来谈一下如何使用Java生成微信小程序二维码&#xff0c;有哪些方式方法呢&#xff1f; 生成微信小程序二维码是开发微信小程序时的常见需求之一。在Java中&#xff0c;我们可以使用多种方式来生成微信小程…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-11-playwright操作iframe-上篇

1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了&#xff0c;因为前边的窗口切换就为这种网页处理提供了思路&#xff0c;另一个原因就是虽然iframe很强大&#xff0c;但是现在很少有网站用它了。但是还是有小伙伴或者童鞋们私下问这个问题&#xff0c;那么宏哥就…

【后端开发】正向代理与反向代理

正向代理 正向代理&#xff08;forward proxy&#xff09;&#xff1a;是一个位于客户端和目标服务器之间的服务器(代理服务器)&#xff0c;为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求并指定目标&#xff0c;然后代理服务器向目标服务器转交请求并将…

【日志记录】——主MCU 通过私有协议更新从MCU程序固件

一&#xff1a;需求分析 在一些系统较为复杂的嵌入式设备中&#xff0c;往往不止一片MCU或者处理模块&#xff0c;通常为一片主MCU负责应用逻辑处理和对外网络通信&#xff0c;其他从MCU负责实时采集处理高频数据&#xff0c;在设备运营过程中&#xff0c;往往伴随新需求或者bu…

动态内容推荐系统PHP代码

这个系统旨在根据用户行为和偏好&#xff0c;动态地向用户推荐内容。这样的系统可以应用于新闻网站、社交媒体平台、电子商务网站等多种场景&#xff0c;以提升用户体验和参与度。 ### 功能概述 系统将基于用户的浏览历史、点击行为和时间花费等数据来评估用户的兴趣点&#…