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

如何不使用django.contrib.auth应用及迁移运行Django Admin面板?

解决方案

要在不执行django.contrib.auth迁移的前提下使用Django Admin,核心是解决Admin对auth模块模型的依赖问题,以下是两种可行方案:

方案一(推荐):保留auth在INSTALLED_APPS但跳过迁移

这种方式更简单,避免复杂的模型替换:

  1. 保留django.contrib.auth在INSTALLED_APPS
    不要从INSTALLED_APPS中移除它,否则会触发Permission模型找不到的错误。

  2. 执行迁移时跳过auth模块
    执行迁移命令时,通过--exclude参数排除auth的迁移文件:

    python manage.py migrate --exclude auth
    

    若不想每次手动加参数,可将该命令写入脚本或CI/CD流程中固化执行。

  3. 自定义AdminSite,完全禁用认证和权限检查
    在项目的admin.py中创建自定义Admin站点,绕过所有权限验证:

    from django.contrib.admin import AdminSite
    
    class UnauthenticatedAdminSite(AdminSite):
        # 禁用登录页面
        login_template = None
    
        def has_permission(self, request):
            # 允许所有请求直接访问Admin
            return True
    
    # 实例化自定义站点
    admin_site = UnauthenticatedAdminSite(name='unauthenticated_admin')
    
  4. 注册模型到自定义站点
    替换默认的admin.site.register,改用自定义站点注册模型:

    from .models import YourModel1, YourModel2
    
    admin_site.register(YourModel1)
    admin_site.register(YourModel2)
    
  5. 更新URL路由
    在urls.py中替换默认的Admin路由:

    from django.urls import path
    from .admin import admin_site
    
    urlpatterns = [
        # 注释掉默认的Admin路由
        # path('admin/', admin.site.urls),
        path('admin/', admin_site.urls),
    ]
    
  6. 移除auth相关中间件
    在settings.py的MIDDLEWARE列表中,移除以下中间件(如果存在):

    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    

方案二:完全移除django.contrib.auth(复杂)

如果一定要彻底移除django.contrib.auth,需要手动替换它的依赖模型:

  1. 从INSTALLED_APPS中移除auth
    删除settings.py中INSTALLED_APPS里的django.contrib.auth。

  2. 创建空的Permission和User模型
    在自己的app(比如core)的models.py中创建空模型,标记为不管理数据库表:

    from django.db import models
    
    class Permission(models.Model):
        class Meta:
            managed = False
            app_label = 'core'
    
    class User(models.Model):
        class Meta:
            managed = False
            app_label = 'core'
    
  3. 配置自定义模型
    在settings.py中指定替换默认的auth模型:

    AUTH_USER_MODEL = 'core.User'
    AUTH_PERMISSION_MODEL = 'core.Permission'
    
  4. 执行方案一中的步骤3-6
    同样需要自定义AdminSite、注册模型、更新路由、移除auth中间件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:01:24