天天看點

Django架構權限劃分學習2023-6-24

作者:不易9093

一、假設我有個使用者AAA,我需要給他授予view_pccount權限,可以通路URL位址/pccount/頁面,這個代碼在Django架構裡怎麼編寫?

在Django架構中,你可以通過使用裝飾器來給使用者授予特定的權限。具體步驟如下:

  1. 首先,在你的Django項目中的urls.py檔案中引入相關的子產品:
from django.contrib.auth.decorators import login_required, permission_required           
  1. 在urls.py檔案中,定義你的URL位址和視圖函數的映射關系,同時使用permission_required裝飾器來限制使用者的通路權限:
from django.urls import path
from .views import pccount_view

urlpatterns = [
    path('pccount/', login_required(permission_required('view_pccount')(pccount_view)), name='pccount'),
]           
  1. 在你的視圖函數中,編寫相應的邏輯處理代碼:
from django.shortcuts import render

def pccount_view(request):
    # 處理pccount頁面的邏輯代碼
    return render(request, 'pccount.html')           

以上代碼中,permission_required('view_pccount')指定了需要具有view_pccount權限才能通路該視圖函數。login_required裝飾器用于限制隻有登入使用者才能通路該視圖函數。

需要注意的是,上述代碼僅為示例,實際情況中可能需要根據你的具體需求進行适當的調整。

Django架構權限劃分學習2023-6-24
Django架構權限劃分學習2023-6-24

二、假設我有個使用者AAA,我需要給他授予view_pccount權限,可以通路URL位址/pccount/頁面,這個代碼在Django架構裡怎麼編寫?請在代碼樣例中,仔細描述我如何對AAA使用者添加、修改、删除權限!

在Django架構中,你可以使用内置的權限系統來管理使用者的權限。首先,你需要在Django的settings.py檔案中配置AUTHENTICATION_BACKENDS參數,確定使用的是Django自帶的權限系統。

# settings.py 預設沒有,需要自己添加Django4.1版本。

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
]           

然後,在你的應用中的models.py檔案中定義一個權限模型,用于存儲使用者的權限資訊。

# models.py

from django.db import models
from django.contrib.auth.models import AbstractUser, Permission

class User(AbstractUser):
    # 自定義的使用者模型,繼承自AbstractUser
    pass

class CustomPermission(models.Model):
    # 自定義的權限模型,用于存儲使用者的權限資訊
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    permission = models.ForeignKey(Permission, on_delete=models.CASCADE)           

接着,你可以使用以下代碼來為AAA使用者添加、修改、删除權限。

from django.contrib.auth.models import Permission
from .models import User, CustomPermission

# 擷取AAA使用者
aaa_user = User.objects.get(username='AAA')

# 擷取view_pccount權限
view_pccount_perm = Permission.objects.get(codename='view_pccount')

# 給AAA使用者添加view_pccount權限
custom_perm = CustomPermission(user=aaa_user, permission=view_pccount_perm)
custom_perm.save()

# 修改AAA使用者的權限
custom_perm.permission = new_permission
custom_perm.save()

# 删除AAA使用者的權限
custom_perm.delete()           

以上代碼中,我們首先通過User.objects.get()方法擷取到AAA使用者的執行個體,然後通過Permission.objects.get()方法擷取到view_pccount權限的執行個體。接着,我們通過建立CustomPermission對象來為AAA使用者添加、修改、删除權限。最後,我們使用save()方法儲存更改,或使用delete()方法删除權限。

請注意,以上代碼僅為示例,實際使用時你需要根據你的實際需求進行相應的修改和适配。

Django架構權限劃分學習2023-6-24
Django架構權限劃分學習2023-6-24

三、假設我有個使用者AAA,我需要給他授予view_pccount權限,可以通路URL位址/pccount/頁面,這個代碼在Django架構裡怎麼編寫?請在代碼樣例中,仔細描述我如何對AAA使用者添加、修改、删除權限,每次操作都對應Django預設權限的哪張表格!

在Django架構中,你可以使用内置的權限系統來管理使用者權限。首先,你需要在你的Django項目的settings.py檔案中,将'django.contrib.auth'和'django.contrib.contenttypes'添加到INSTALLED_APPS清單中。

然後,在你的應用的models.py檔案中,導入Permission和User模型:

from django.contrib.auth.models import Permission, User           

接下來,你可以使用以下代碼來給使用者AAA授予view_pccount權限:

user = User.objects.get(username='AAA')
permission = Permission.objects.get(codename='view_pccount')

user.user_permissions.add(permission)           

這将在auth_user_user_permissions表格中添加一條記錄,将AAA使用者與view_pccount權限關聯起來。

如果你需要修改AAA使用者的權限,可以使用以下代碼:

user.user_permissions.remove(permission)
# 添加或移除其他權限
user.user_permissions.add(permission)           

這将在auth_user_user_permissions表格中更新AAA使用者的權限。

如果你需要删除AAA使用者的權限,可以使用以下代碼:

user.user_permissions.remove(permission)           

這将在auth_user_user_permissions表格中删除AAA使用者的權限記錄。

需要注意的是,以上操作隻涉及到了auth_user_user_permissions表格,該表格是Django自動生成的用于存儲使用者和權限之間的關聯關系的表格。

Django架構權限劃分學習2023-6-24

四、假設我有個使用者AAA,我需要給他授予view_pccount權限,可以通路URL位址/pccount/頁面,這個代碼在Django架構裡怎麼編寫?請在代碼樣例中,仔細描述我如何對AAA使用者添加、修改、删除權限,每次操作都對應Django預設權限的哪張表格!添權重限時,如何獲得auth_permission表中已有的權限?

在Django架構中,可以使用以下代碼對使用者AAA進行權限的添加、修改和删除操作。

首先,需要導入相關的子產品:

from django.contrib.auth.models import User, Permission
from django.contrib.contenttypes.models import ContentType           

添權重限時,可以使用以下代碼:

# 擷取AAA使用者
user = User.objects.get(username='AAA')

# 擷取pccount頁面的ContentType
content_type = ContentType.objects.get(app_label='your_app_label', model='your_model_name')

# 擷取已有的權限
existing_permission = Permission.objects.filter(content_type=content_type)

# 添權重限
permission = Permission.objects.create(
    codename='view_pccount',
    name='Can view pccount',
    content_type=content_type
)
user.user_permissions.add(permission)           

在上述代碼中,your_app_label和your_model_name需要替換為實際的應用和模型名稱。

修改權限時,可以使用以下代碼:

# 擷取AAA使用者
user = User.objects.get(username='AAA')

# 擷取pccount頁面的ContentType
content_type = ContentType.objects.get(app_label='your_app_label', model='your_model_name')

# 擷取已有的權限
permission = Permission.objects.get(content_type=content_type, codename='view_pccount')

# 修改權限
permission.name = 'New permission name'
permission.save()           

删除權限時,可以使用以下代碼:

# 擷取AAA使用者
user = User.objects.get(username='AAA')

# 擷取pccount頁面的ContentType
content_type = ContentType.objects.get(app_label='your_app_label', model='your_model_name')

# 擷取已有的權限
permission = Permission.objects.get(content_type=content_type, codename='view_pccount')

# 删除權限
user.user_permissions.remove(permission)           

以上代碼中,添加、修改和删除權限對應的Django預設權限表格是auth_permission表。

Django架構權限劃分學習2023-6-24
Django架構權限劃分學習2023-6-24