Django中解决request.user返回AnonymousUser的问题

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13 | 1人浏览过
原创

本文详解Django中request.user返回AnonymousUser的原因及解决方法。主要问题包括未登录、登录成功但未注册Cookie导致身份无法验证。通过确保正确调用auth.login注册Cookie或重写登录逻辑,可解决全局获取用户名的异常。

Django request.user返回AnonymousUser问题解析

以下直接展示相关代码实现。


def pro_mgr():
  """
  获取当前登陆用户的项目
  :return:
  """
  if DEVELOP_USER_NAME == 'admin':
    return Project.objects.all()
  return Project.objects.filter(prj_mgr=DEVELOP_USER_NAME)


class DeployApplyForm(ModelForm):
  # project = forms.ModelChoiceField(queryset=pro_mgr())
  bgn_time = forms.DateTimeField(initial=datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S"), label=u'开始',
                  input_formats=['%Y-%m-%dT%H:%M:%S'], widget=forms.DateTimeInput(
      attrs={'type': 'datetime-local', 'emptyTips': u'请选择时间', 'step': '1'}))
  end_time = forms.DateTimeField(initial=datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S"), label=u'结束',
                  input_formats=['%Y-%m-%dT%H:%M:%S'], widget=forms.DateTimeInput(
      attrs={'type': 'datetime-local', 'emptyTips': u'请选择时间', 'step': '1'}))

  class Meta:
    model = DeployApply
    fields = '__all__'


  def __init__(self, *args, **kwargs):
    prj_mgr = kwargs.pop('prj_mgr', '')
    super(DeployApplyForm, self).__init__(*args, **kwargs)
    if prj_mgr == 'admin':
      self.fields['project'] = forms.ModelChoiceField(queryset=Project.objects.all())
    else:
      self.fields['project'] = forms.ModelChoiceField(queryset=Project.objects.filter(prj_mgr=prj_mgr))

//views.py
deployApplyForm = DeployApplyForm(initial=wfContent[0], prefix='deployApply',prj_mgr=request.user.username)

//settings.py
# DEVELOP模式下登陆用户
DEVELOP_USER_NAME = 'admin'

AnonymousUser错误排查与修复

补充说明:在Django框架中,当通过request.user获取用户名时若出现AnonymousUser(匿名对象)报错。

现象描述

尽管代码中已添加额外属性,但尝试通过request.user方式获取信息时,打印结果显示为AnonymousUser对象,导致无法正确获取user值。

原因分析

1. 用户未登录账号或登录流程未能成功执行。

2. 虽然登录成功,但在登录处理代码中未正确注册Cookie,致使系统无法验证用户身份。

3. 其他潜在原因。

解决方案

1. 确保用户已登录,可尝试使用admin账户登录以验证是否解决问题。

2. 参考以下代码,在login环节注册Cookie(此为常见情况):


auth_obj = auth.authenticate(request, username=username, password=password)
if auth_obj:
  # 需要auth验证cookie
  auth.login(request, auth_obj)
  ....

3. 或者采用其他方式重写login逻辑。

以上关于Django全局使用request.user.username的实例详解内容,旨在为开发者提供参考,欢迎继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表