Django两个不同项目如何共用MySQL数据库中custom user表实现登录
Django双项目共用CustomUser表方案
是否需要在project B中定义相同的自定义用户模型
需要定义和project A字段完全一致的CustomUser模型,但要通过配置让Django在project B中不管理该表的结构变更,避免影响原有表数据。
具体配置步骤
- 步骤1:配置project B的数据库连接
确保project B的settings.py中数据库配置和project A完全一致,指向同一个MySQL库:
# project B/settings.py 数据库配置示例 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '和project A相同的数据库名', 'USER': '数据库账号', 'PASSWORD': '数据库密码', 'HOST': '数据库服务地址', 'PORT': '3306', } }
- 步骤2:编写project B的CustomUser模型
在project B中新建app(例如命名为accounts),在models.py中编写和project A字段完全一致的CustomUser模型,添加两个核心Meta配置:
# project B/accounts/models.py from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): # 此处所有自定义字段和project A的CustomUser保持完全一致,示例如下 phone = models.CharField(max_length=11, blank=True, null=True) avatar = models.ImageField(upload_to='avatar', blank=True, null=True) class Meta: managed = False # 告诉Django不要对该表做迁移、表结构修改操作 db_table = 'project A中CustomUser对应的实际表名' # 可在MySQL中查看,通常格式为「A项目的app名_模型名」,例如`a_accounts_customuser`
- 步骤3:配置全局用户模型指向
在project B的settings.py中添加AUTH_USER_MODEL配置,和project A的配置保持一致:
# project B/settings.py AUTH_USER_MODEL = 'accounts.CustomUser'
- 步骤4:登录校验逻辑复用
配置完成后直接用Django自带的auth校验方法即可,和单项目的登录逻辑用法完全相同:
from django.contrib.auth import authenticate, login def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) # 登录成功跳转 else: # 账号密码错误提示
注意事项
- 若后续project A修改了CustomUser的字段,必须同步修改project B中CustomUser的字段定义,否则会出现查询报错
- 所有CustomUser表的结构变更、数据写入操作统一在project A中执行,不要在project B中修改该表数据/结构
- 两个项目的Django大版本尽量保持一致,避免密码哈希算法差异导致密码校验失败
内容的提问来源于stack exchange,提问作者azril
相关产品推荐
相关产品推荐

