在上一篇文章中,我們學習了如何修改Django項目的資料庫結構,並探討了MariaDB的使用方法。本篇文章中,我們將探討如何設置Django Admin管理系統,以及如何整合Swagger以便更方便地進行API文檔和測試:
Django Admin的設置通常在項目的全局settings.py
文件中進行配置,例如註冊Admin應用、定義全局的Admin樣式和配置。每個App可以有自己的admin.py
文件,用於註冊該App中的模型到Django Admin後台,這允許我們為每個模型定義定制的展示、過濾和編輯行為。
我們先以account
這個認證用的使用者App來說明,首先需要確認settings.py
中的配置:
backend/settings.py
AUTH_USER_MODEL = 'account.UserProfile'
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
...
]
在account
應用中,我們需要在admin.py
文件中註冊模型:
account/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import UserProfile
@admin.register(UserProfile)
class UserProfileAdmin(UserAdmin):
model = UserProfile
fieldsets = UserAdmin.fieldsets
add_fieldsets = UserAdmin.add_fieldsets
設置完成後,我們可以嘗試連接到管理員平台:
→ http://localhost:8000/admin
進入後我們可以看到兩個資料欄位User和Group。接下來我們嘗試建立一個名叫king
的群組,方便我們後續進行權限管理的示範:
建立後,接著我們來到user頁面,並將我們的使用者帳號也歸屬於該群組內:
我們將設定只有在king
群組的使用者才有權限使用hello
的API:
hello/views.py
from rest_framework import permissions, viewsets
from .models import HelloModel
from .serializers import HelloSerializer
import logging
logger = logging.getLogger('django')
class IsMemberOfKing(permissions.BasePermission):
def has_permission(self, request, view):
if request.user and request.user.groups.filter(name='king').exists():
return True
return False
class HelloViewSet(viewsets.ModelViewSet):
queryset = HelloModel.objects.all()
serializer_class = HelloSerializer
permission_classes = [permissions.IsAuthenticated, IsMemberOfKing]
首先獲取Token:
curl --location 'http://localhost:8000/account/token/' \
--header 'Content-Type: application/json' \
--data '{
"username": "lucien",
"password": "lucien"
}'
接著嘗試呼叫API:
curl --location 'http://localhost:8000/api/hello' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <your_access_token>' \
--data '{
"name": "Lucien Test2"
}'
首先在requirements.txt
中添加drf-spectacular
:
requirements.txt
drf-spectacular
記得重建Docker容器以下載新的依賴:
docker-compose -f docker-compose-local.yml down
docker-compose -f docker-compose-local.yml up --build -d
接下來,更新全局設置:
backend/settings.py
INSTALLED_APPS = [
...
'drf_spectacular',
]
REST_FRAMEWORK = {
...
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
SPECTACULAR_SETTINGS = {
'TITLE': 'Template API',
'DESCRIPTION': 'Detailed description of API',
'VERSION': '1.0.0',
'SERVE_INCLUDE_SCHEMA': False,
}
在urls.py
中添加Swagger相關的路由配置:
backend/urls.py
from django.contrib import admin
from django.urls import path, include
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
urlpatterns = [
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
...
]
配置完成後,我們可以通過以下URL訪問Swagger UI:
→ http://localhost:8000/api/schema/swagger-ui/
進入Swagger UI後,可以嘗試直接在界面上獲取Token:
將獲取的Token填入右上角的驗證按鈕進行登入操作:
完成後,我們就能對其他的API在Swagger上進行測試了。此外,你也可以嘗試連接其他文檔網站:
→ http://localhost:8000/api/schema/redoc/
在這篇文章中,我們學習了如何設置Django Admin管理系統,並通過群組來管理用戶權限。我們還整合了Swagger,使API文檔和測試變得更加方便。通過這些配置,我們的Django項目變得更加完善和易於管理。在下一篇文章中,將手把手教各位如何設定Logger、Middleware和Core等設置。
[DAY7] Django與Docker Compose後端開發實戰 - 建立Logger系統、Middleware和CORS