Django中解决request.user返回AnonymousUser的问题
本文详解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的实例详解内容,旨在为开发者提供参考,欢迎继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













