日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DjangoRestFramework使用自定义权限

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DjangoRestFramework使用自定义权限 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 項目配置
    • 項目結構
    • 配置項目
    • 用戶模型
    • 設備模型
  • 2. 權限設置
    • 自定義權限
    • 視圖模型
    • 路由設置
  • 3. 測試

1. 項目配置


項目結構

構建 Django 項目,結構如下

  • MyProj03/
    ??|__ Assets/
    ????|__ perms.py
    ????|__ models.py
    ????|__ views.py
    ????|__ urls.py
    ????|__ ...
    ??|__ MyProj03/
    ????|__ settings.py
    ????|__ urls.py
    ????|__ ...
    ??|__ UserManagement/
    ????|__ models.py
    ????|__ ...

配置項目

MyProj03/MyProj03/settings.py 代碼如下

INSTALLED_APPS = [...'rest_framework','UserManagement','Assets', ]REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated','Devices.perms.RbacPermission', # 自定義權限認證],'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_simplejwt.authentication.JWTAuthentication','rest_framework.authentication.BasicAuthentication','rest_framework.authentication.SessionAuthentication',)}AUTH_USER_MODEL = 'UserManagement.SysUsers'

用戶模型

MyProj03/UserManagement/models.py 代碼如下

class SysUsers(AbstractBaseUser):id = models.BigAutoField(primary_key=True)username = models.CharField(max_length=40, unique=True)is_staff = models.BooleanField(('staff status'),default=False,)is_admin = models.BooleanField(default=False)last_login = models.DateTimeField(blank=True, null=True)is_active = models.SmallIntegerField(blank=True, null=True)is_alive = models.SmallIntegerField(blank=True, null=True)objects = UserManager()USERNAME_FIELD = 'username'class Meta:db_table = 'sys_users'verbose_name = "用戶"verbose_name_plural = "用戶"def __str__(self):return self.username

添加幾條數據

idusernamepasswordis_staffis_adminlast_login_timeis_activeis_alive
1吳敬中123456002021-06-24 14:58:22.11850411
2余則成123456012021-06-24 14:58:22.11850411
3王翠萍123456002021-06-24 14:58:22.11850411
4穆晚秋123456002021-06-24 14:58:22.11850411

設備模型

MyProj03/Assets/models.py 代碼如下

from django.db import models# Create your models here. class Devices(models.Model):id = models.BigAutoField(primary_key=True)name = models.CharField(max_length=32, blank=True, null=True)dept_id = models.BigIntegerField(blank=True, null=True)is_alive = models.SmallIntegerField(blank=True, null=True)class Meta:db_table = 'devices'verbose_name = "設備"verbose_name_plural = "設備"def __str__(self):return self.name

添加數據

idnamedept_idis_alive
1總經辦電話11
2總經辦臺式機1號11
3總經辦臺式機2號11
4總經辦打印機1號11
5市場一部電話1號21
6市場一部電話2號21

2. 權限設置


自定義權限

MyProj03/Assets/perms.py

from rest_framework.permissions import BasePermissionclass UserPermission(BasePermission):def has_permission(self, request, view):if not request.user.is_admin:return Truereturn False

視圖模型

MyProj03/Assets/views.py

from .models import Assets from rest_framework import serializers, viewsets from Devices.perms import UserPermissionclass DevicesSerializer(serializers.ModelSerializer):class Meta:model = Assetsfields = "__all__"class DevicesViewSet(viewsets.ModelViewSet):permission_classes = [UserPermission, ]queryset = Assets.objects.all()serializer_class = DevicesSerializer

路由設置

MyProj03/Assets/urls.py

from django.urls import path, include from rest_framework import routersfrom Assets.views import DevicesViewSetrouter = routers.SimpleRouter() router.register('devices', DevicesViewSet)urlpatterns = [path('', include(router.urls)), ]

MyProj03/MyProj03/urls.py

from django.urls import path, includeurlpatterns = [path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),path('assets/', include('Assets.urls')), ]

3. 測試

使用 余則成 賬號訪問(is_admin==True)數據,可訪問

使用 吳敬中 賬號訪問(is_admin==False)數據,不可訪問

.
.
.
.
.
.
桃花仙人種桃樹,又摘桃花換酒錢_

總結

以上是生活随笔為你收集整理的DjangoRestFramework使用自定义权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。