首页 > 编程语言 >Python Django Restful API simple JWT

Python Django Restful API simple JWT

时间:2023-06-11 19:33:48浏览次数:49  
标签:APICanRead 检查用户 Python 用户组 JWT Django API 权限 permissions

在这种情况下,您可以创建一个自定义权限类,并检查用户所属的任何组是否具有相应的权限。例如,您可以在 Django 后台为每个组定义一个具有读取权限(`view` 权限)的权限对象。然后,在自定义权限类中检查用户组是否具有此权限。

首先,在 `models.py` 文件中创建一个新的权限。例如,创建一个名为 `APICanRead` 的权限。为了更方便控制权限,我们可以将其附加到一个模型,例如一个名为 `PermissionControl` 的空模型:

```python
from django.db import models

class PermissionControl(models.Model):
class Meta:
permissions = [
("APICanRead", "Can view API"),
]
default_permissions = [] # 清空默认权限,以免混淆
```

接下来,在自定义权限类中检查用户所属的任何组是否具有这个权限:

```python
from rest_framework import permissions

class ApiReadPermission(permissions.BasePermission):
"""
只允许具有读取权限的用户组访问。
"""

def has_permission(self, request, view):
# 检查用户所属的所有组是否具有"APICanRead"权限。
return (
request.user
and request.user.groups.filter(permissions__codename="APICanRead").exists()
)
```

现在,将 `ApiReadPermission` 类添加到您的 APIView:

```python
from rest_framework.views import APIView
from rest_framework.response import Response

class MyAPIView(APIView):
permission_classes = [ApiReadPermission]

def get(self, request, *args, **kwargs):
return Response({'message': '可以访问此 API 的用户组具有读权限'})
```

在这个示例中,我们首先创建了一个名为 `APICanRead` 的新权限,并将其附加到一个名为 `PermissionControl` 的模型。然后,我们在自定义权限类 `ApiReadPermission` 中检查用户所属的任何组是否具有此权限。最后,我们将此权限类添加到APIView。

现在,您可以在 Django 后台为不同的用户组分配或删除 `APICanRead`权限。只有具有此权限的用户组才能访问该 API。如果您需要添加新的组(如 GroupC、GroupD),只需在后台为新组分配 `APICanRead` 权限即可。这种方式使得权限管理变得更加灵活和可扩展。

标签:APICanRead,检查用户,Python,用户组,JWT,Django,API,权限,permissions
From: https://www.cnblogs.com/skywss27/p/17473433.html

相关文章

  • 关于python程序打包的问题-找不到fsspec
    转载自:https://blog.csdn.net/weixin_47861710/article/details/121267155这个问题困扰了我将近两天的时间一直找不到什么好的办法,甚至打算放弃。主要原因是身边没有可以述说的人,也没有可以请教的人。正在想要放弃的时候找到了解决办法。打包后运行程序是这样的,大概意思是找不......
  • 实验6 turtle绘图与Python库应用编程体验
    task1-1.py实验源码:fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)......
  • mac 搭建python开发环境
    导读:       1.先安装brew        ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"       2.用brew安装wget     brewinstallwget      3.用wget下载pip.py     wgethttps://bo......
  • python定时任务
      无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和python定时任务,注意咯:本篇所讲是python3版本的实现,在python2版本中的实现略有不同,有时间会再写一篇以便大家区分。1.计算明天和昨天的日期#!/usr/bin/envpython#coding=utf-8#获取今天、......
  • 不停机条件下部署 Django 应用
    当我们上线新的服务应用时,经常不得不重启Web服务器以完成部署。但这会对用户造成一定影响,特别是服务器处于繁忙状态时,问题更严重。本文中,作者将针对这一问题,讲述其如何在不停机条件下部署Django应用。当我的网站healthchecks.io每秒接收的请求次数超过一次之后,我就非常清楚地认识......
  • Python 解析配置模块之ConfigParser详解
      yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法。只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子:defaddlist(alist):foriinalist:yieldi+1取出alist的每一项,然后把i+1塞进去。然后通过......
  • 非常简单的Python HTTP服务
       如果你急需一个简单的WebServer,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么,Python可能帮助你。使用Python可以完成一个简单的内建HTTP服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。佻只需要干一件事情,那就是安装一个Python。......
  • 6-11|Python中保证两位小数的方法
    如果你在Python编程过程中需要对输出结果限制小数点位数,那么这篇文章将为你提供多种可靠的方法。一、使用round()函数round()函数是Python内置函数,用于四舍五入,也可以限制小数点位数。num=3.1415926result=round(num,2)print(result)输出结果为3.14。这种方法非常简单,但是需......
  • Django站点静态文件缓存相关问题
    《高性能网站建设指南》中有一条建议,为网站的页面、文件“添加Expires头”。这么做的好处就不多说了,实现方式也比较简单,不过,真的实施这条建议时,还是有许多问题需要考虑。通常情况下,我们需要将图片、js、css等不会经常更新的文件缓存起来,一般来说,配置服务器,为它们设置一个较远的......
  • python 模拟form表单流式上传文件
    如果机器上有PycURL,那么可以使用PycURL来上传文件。不过,由于PycURL需要用到curl,在Windows下安装可能会有点麻烦,除PycURL外,也有一些其它实现POST文件上传的方式,比如这儿的2楼有人贴出了一个将文件进行编码之后再POST的方法,另外还有MultipartPostHandler、urllib2_......