You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django会员注册添加管理员审核准入流程的实现方案咨询

Django 注册用户管理员审核功能实现方案

步骤1:扩展用户模型新增审核状态字段

首先继承Django自带的AbstractUser扩展用户模型,新增审核状态字段:

# 你的应用/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 审核状态默认未通过
    is_approved = models.BooleanField(default=False, verbose_name="管理员审核通过")

修改项目settings.py配置,指定自定义用户模型:
AUTH_USER_MODEL = "你的应用名.CustomUser"
注意:如果已经存在历史用户数据,执行makemigrations和migrate生成字段后,需要批量将现有正常用户的is_approved字段设为True,避免老用户无法正常访问

步骤2:调整注册逻辑,禁止新用户注册后自动登录

修改注册视图,用户注册成功后不执行登录操作,直接跳转至待审核提示页:

# 你的应用/views.py
from django.shortcuts import render, redirect
from .forms import CustomUserCreationForm

def register(request):
    if request.method == "POST":
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            # 注释/删除原本的自动登录逻辑:login(request, user)
            return redirect("pending_approval")
    else:
        form = CustomUserCreationForm()
    return render(request, "register.html", {"form": form})

你需要自行配置pending_approval对应的路由和提示模板,内容可自定义为“您的账号正在等待管理员审核,审核通过后即可正常访问平台”

步骤3:新增全局访问拦截,未审核用户禁止访问核心页面

通过中间件做全局权限校验,避免每个视图单独加判断逻辑:

# 你的应用/middleware.py
from django.shortcuts import redirect
from django.urls import reverse

class ApprovalCheckMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 放行无需审核的路径:登录、注册、待审核页、admin后台、静态资源
        allowed_paths = [
            reverse("login"),
            reverse("register"),
            reverse("pending_approval"),
            "/admin/",
            "/static/"
        ]
        if request.path in allowed_paths or request.path.startswith("/admin/") or request.path.startswith("/static/"):
            return self.get_response(request)
        
        # 已登录但未审核的用户统一跳转至待审核页
        if request.user.is_authenticated and not request.user.is_approved:
            return redirect("pending_approval")
        
        return self.get_response(request)

在settings.py的MIDDLEWARE列表中新增中间件,需要放在SessionMiddleware和AuthenticationMiddleware之后:

MIDDLEWARE = [
    # 其他默认中间件保持不变
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 新增审核校验中间件
    '你的应用名.middleware.ApprovalCheckMiddleware',
]

步骤4:配置Admin后台支持管理员审核操作

在admin后台注册自定义用户模型,开放审核状态编辑权限:

# 你的应用/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    # 用户列表页展示审核状态
    list_display = UserAdmin.list_display + ("is_approved",)
    # 新增审核状态编辑项
    fieldsets = UserAdmin.fieldsets + (
        ("审核设置", {"fields": ("is_approved",)}),
    )
    # 新增批量审核通过操作
    actions = ["approve_selected_users"]

    def approve_selected_users(self, request, queryset):
        queryset.update(is_approved=True)
    approve_selected_users.short_description = "批量审核通过选中用户"

admin.site.register(CustomUser, CustomUserAdmin)

可选优化

  • 可新增邮件通知逻辑,用户注册后给管理员发审核提醒,用户审核通过后给用户发访问通知
  • 可在待审核页面添加进度查询、联系管理员入口

内容的提问来源于stack exchange,提问作者leesuccess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:06:03