Become a sponsor

View 层负责处理 HTTP 请求和返回响应,使用 Django 类视图(Class-Based Views)。每个视图类对应一个 API 端点,通过装饰器实现登录验证、权限检查和操作日志记录。
设计原则
View)@method_decorator(check_login) 验证登录PermissionRequired mixin 检查权限@operation_log 记录操作日志DJANGO_DEMO 演示模式以案例模块为例,application/example/views.py:
from django.utils.decorators import method_decorator
from django.views import View
from application.example import services
from config.env import DJANGO_DEMO
from middleware.login_middleware import check_login
from middleware.permission_middleware import PermissionRequired
from utils import R
from application.operation_log.constants import LogType
from application.operation_log.decorators import operation_log
# =============================================================
# 分页查询视图
# =============================================================
@method_decorator(check_login, name="get")
class ExamplePageView(PermissionRequired, View):
"""案例分页数据查询视图"""
permission_required = ("sys:example:page",)
@operation_log(title="案例管理-查询分页列表", log_type=LogType.QUERY)
def get(self, request):
result = services.get_example_page(request)
return result
# =============================================================
# 详情查询视图
# =============================================================
@method_decorator(check_login, name="get")
class ExampleDetailView(PermissionRequired, View):
"""案例详情查询视图"""
permission_required = ("sys:example:detail",)
@operation_log(title="案例管理-查询记录详情", log_type=LogType.QUERY)
def get(self, request, id):
data = services.get_example_detail(id)
return R.ok(data=data)
# =============================================================
# 添加视图
# =============================================================
@method_decorator(check_login, name="post")
class ExampleAddView(PermissionRequired, View):
"""添加案例视图"""
permission_required = ("sys:example:add",)
@operation_log(title="案例管理-添加记录", log_type=LogType.ADD)
def post(self, request):
# 演示环境禁止操作
if DJANGO_DEMO:
return R.failed("演示环境,暂无操作权限")
result = services.add_example(request)
return result
# =============================================================
# 更新视图
# =============================================================
@method_decorator(check_login, name="put")
class ExampleUpdateView(PermissionRequired, View):
"""更新案例视图"""
permission_required = ('sys:example:update',)
@operation_log(title="案例管理-更新记录", log_type=LogType.UPDATE)
def put(self, request):
# 演示环境禁止操作
if DJANGO_DEMO:
return R.failed("演示环境,暂无操作权限")
result = services.update_example(request)
return result
# =============================================================
# 删除视图(支持批量)
# =============================================================
@method_decorator(check_login, name="delete")
class ExampleDeleteView(PermissionRequired, View):
"""删除案例视图"""
permission_required = ('sys:example:delete',)
@operation_log(title="案例管理-删除记录", log_type=LogType.DELETE)
def delete(self, request, id):
# 演示环境禁止操作
if DJANGO_DEMO:
return R.failed("演示环境,暂无操作权限")
result = services.delete_examples(id)
return result
# =============================================================
# 状态更新视图
# =============================================================
@method_decorator(check_login, name="put")
class ExampleStatusView(PermissionRequired, View):
"""设置案例状态视图"""
permission_required = ('sys:example:status',)
def put(self, request):
# 演示环境禁止操作
if DJANGO_DEMO:
return R.failed("演示环境,暂无操作权限")
result = services.update_example_status(request)
return result验证 JWT 登录状态,从 Authorization: Bearer <token> 头解析用户信息。未登录返回 401。
@method_decorator(check_login, name="get") # 验证 GET 请求
@method_decorator(check_login, name="post") # 验证 POST 请求
@method_decorator(check_login, name="put") # 验证 PUT 请求
@method_decorator(check_login, name="delete") # 验证 DELETE 请求权限检查 mixin,用户 ID 为 1 的超级管理员自动跳过权限检查。
class ExamplePageView(PermissionRequired, View):
permission_required = ("sys:example:page",) # 权限标识操作日志记录装饰器,自动记录请求参数、响应结果、执行时间等。
@operation_log(title="案例管理-添加记录", log_type=LogType.ADD)日志类型:
| 类型 | 说明 |
|---|---|
LogType.QUERY | 查询操作 |
LogType.ADD | 添加操作 |
LogType.UPDATE | 更新操作 |
LogType.DELETE | 删除操作 |
写操作(add/update/delete/status)需检查 DJANGO_DEMO 配置:
if DJANGO_DEMO:
return R.failed("演示环境,暂无操作权限")| 操作 | 权限标识 | 说明 |
|---|---|---|
| 分页查询 | sys:{module}:page | 查询分页数据 |
| 列表查询 | sys:{module}:list | 查询列表数据 |
| 详情查询 | sys:{module}:detail | 查询单条详情 |
| 添加 | sys:{module}:add | 添加记录 |
| 更新 | sys:{module}:update | 更新记录 |
| 删除 | sys:{module}:delete | 删除记录 |
| 状态 | sys:{module}:status | 更新状态 |
View 层只负责:
禁止在 View 层直接操作数据库或编写业务逻辑。
View 层使用 Django 类视图,通过装饰器实现登录验证(check_login)、权限检查(PermissionRequired)和操作日志记录(operation_log)。写操作检查 DJANGO_DEMO 演示模式。View 层只负责请求分发和响应返回,业务逻辑集中在 Service 层。