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

Django自定义用户模型OTP登录后无法获取用户详情求助

问题分析与解决方案

核心问题拆解

  1. 模板语法错误:报错Could not parse the remainder: '['member_id']' from 'request.POST.get['member']'是因为Django模板中调用方法必须使用括号(),而非方括号[];且登录后完全不需要通过POST/GET传递用户ID。
  2. 用户信息获取逻辑错误:登录成功后,Django会自动将当前用户实例存入request.user,无需手动通过请求参数传递member_id。
  3. 视图函数写法错误:society_admin_home中request.POST.get['member_id']是Python语法错误,get是方法,必须用括号调用。

具体修复步骤

1. 修正视图函数 society_admin_home

添加登录验证装饰器,直接通过request.user获取当前登录用户:

from django.contrib.auth.decorators import login_required

@login_required(login_url='login')  # 未登录自动跳转到登录页
def society_admin_home(request):
    # request.user 就是当前登录的 S_Society_Association_Master 实例
    context = {
        'current_member': request.user
    }
    return render(request, 'societyadmin/home.html', context)

2. 修正模板(home.html)中的用户信息调用

直接通过上下文传递的current_member或request.user访问用户属性:

<div class="user-info">
    <h3>欢迎您,{{ current_member.member_name }}</h3>
    <p>会员ID:{{ current_member.member_id }}</p>
    <p>联系电话:{{ current_member.member_contact_number }}</p>
    <p>角色:{{ current_member.get_member_role_display }}</p> <!-- 显示角色的友好名称 -->
</div>

3. 完善自定义用户模型配置

确保在项目的settings.py中指定自定义用户模型:

AUTH_USER_MODEL = 'your_app_name.S_Society_Association_Master'  # 替换为你的实际APP名称

同时建议给自定义用户模型添加权限相关字段和管理器,避免后续权限问题:

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager

class UserManager(BaseUserManager):
    def create_user(self, member_email_id, password=None, **extra_fields):
        if not member_email_id:
            raise ValueError('会员邮箱必须填写')
        user = self.model(member_email_id=self.normalize_email(member_email_id), **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, member_email_id, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(member_email_id, password, **extra_fields)

class S_Society_Association_Master(AbstractBaseUser, PermissionsMixin):
    # 保留原有字段
    is_staff = models.BooleanField(default=False)  # 后台管理权限字段
    is_active = models.BooleanField(default=True)

    objects = UserManager()  # 添加用户管理器
    USERNAME_FIELD = 'member_email_id'

4. 修正登录后的跳转逻辑

在login_otp视图中,OTP验证成功后应跳转到society_admin_home视图,而非直接渲染模板:

if otp == member.otp:
    member_row = S_Society_Association_Master.objects.get(member_id = member.member_id)
    login(request , member_row)
    return redirect('society_admin_home')  # 改为跳转视图,而非直接渲染模板

额外注意事项

  • 确保login_attempt视图中,前端表单提交的手机号字段名是member_id,否则request.POST.get('member_id')会获取不到值。
  • 自定义用户模型中的password字段应配合set_password方法加密存储,避免明文存储密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:05:27