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

Django如何使用phpMyAdmin内已有的用户表实现身份验证登录

Django对接phpMyAdmin现有用户表实现身份验证方案

适配前提说明

Django默认使用自带的auth_user表完成身份校验,如果你在phpMyAdmin中提前创建了自定义用户表,需要调整认证逻辑适配已有表结构,才能正常完成登录校验。

具体实现步骤

1. 方案选择(二选一即可)

方案一:自定义用户模型适配现有表(可调整表结构时优先选)

  • 在对应应用的models.py中定义和phpMyAdmin用户表字段完全匹配的ORM模型:
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models

class CustomUser(AbstractBaseUser):
    # 下方字段需和你phpMyAdmin内用户表的字段名、类型、长度完全一致
    username = models.CharField(max_length=150, unique=True)
    email = models.EmailField(unique=True)
    phone = models.CharField(max_length=11, blank=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'username' # 登录时用作唯一校验的字段,用手机号登录就改成对应字段名
    REQUIRED_FIELDS = ['email'] # 创建超级用户时的必填字段

    class Meta:
        db_table = '你的phpMyAdmin用户表实际表名' # 必须填已有表名,禁止Django生成新表
  • 在settings.py中指定自定义用户模型:
AUTH_USER_MODEL = '你的应用名.CustomUser'
  • 执行迁移命令,因为表已经提前创建,需要加fake参数避免Django尝试建表:
python manage.py makemigrations
python manage.py migrate --fake-initial

方案二:自定义认证后端(完全不能修改现有表结构时用)

  • 在应用目录下新建auth_backend.py自定义认证逻辑:
from django.contrib.auth.backends import BaseBackend
from django.contrib.auth.hashers import check_password
from .models import YourUserModel # 替换为你对应现有用户表的ORM模型

class CustomAuthBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            # 从已有用户表查询对应用户
            user = YourUserModel.objects.get(username=username)
            # 密码校验:如果你的密码是自定义加密/明文存储,替换为对应的校验逻辑即可
            if check_password(password, user.password) and user.is_active:
                return user
        except YourUserModel.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return YourUserModel.objects.get(pk=user_id)
        except YourUserModel.DoesNotExist:
            return None
  • 在settings.py中注册自定义认证后端:
AUTHENTICATION_BACKENDS = [
    '你的应用名.auth_backend.CustomAuthBackend',
    # 不需要保留Django默认认证逻辑可删除下一行
    'django.contrib.auth.backends.ModelBackend',
]

2. 登录逻辑验证

完成配置后可以用简易测试视图验证登录功能:

from django.contrib.auth import authenticate, login
from django.http import JsonResponse

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:
            login(request, user)
            return JsonResponse({'code':0, 'msg':'登录成功'})
        return JsonResponse({'code':1, 'msg':'用户名或密码错误'})

注意:如果phpMyAdmin中的用户表存储的是明文密码,属于高危安全隐患,建议尽快批量加密为Django默认支持的加密格式,避免数据泄露风险。


相关配置参考截图

相关配置截图1
相关配置截图2
相关配置截图3
相关配置截图4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:39:00