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

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

本文详解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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。