如何不使用django.contrib.auth应用及迁移运行Django Admin面板?
要在不执行django.contrib.auth迁移的前提下使用Django Admin,核心是解决Admin对auth模块模型的依赖问题,以下是两种可行方案:
方案一(推荐):保留auth在INSTALLED_APPS但跳过迁移
这种方式更简单,避免复杂的模型替换:
保留
django.contrib.auth在INSTALLED_APPS
不要从INSTALLED_APPS中移除它,否则会触发Permission模型找不到的错误。执行迁移时跳过auth模块
执行迁移命令时,通过--exclude参数排除auth的迁移文件:python manage.py migrate --exclude auth若不想每次手动加参数,可将该命令写入脚本或CI/CD流程中固化执行。
自定义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')注册模型到自定义站点
替换默认的admin.site.register,改用自定义站点注册模型:from .models import YourModel1, YourModel2 admin_site.register(YourModel1) admin_site.register(YourModel2)更新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), ]移除auth相关中间件
在settings.py的MIDDLEWARE列表中,移除以下中间件(如果存在):'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
方案二:完全移除django.contrib.auth(复杂)
如果一定要彻底移除django.contrib.auth,需要手动替换它的依赖模型:
从INSTALLED_APPS中移除auth
删除settings.py中INSTALLED_APPS里的django.contrib.auth。创建空的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'配置自定义模型
在settings.py中指定替换默认的auth模型:AUTH_USER_MODEL = 'core.User' AUTH_PERMISSION_MODEL = 'core.Permission'执行方案一中的步骤3-6
同样需要自定义AdminSite、注册模型、更新路由、移除auth中间件。
内容的提问来源于stack exchange,提问作者Mateusz

