Django'AnonymousUser'对象没有属性'_meta' [英] Django 'AnonymousUser' object has no attribute '_meta'
本文介绍了Django'AnonymousUser'对象没有属性'_meta'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Django应用中使用社交登录。因此,我在 settings.py
文件中添加了其他后端。
I am using social login in my Django app. So, I have added additional backends in my settings.py
file.
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'social_core.backends.open_id.OpenIdAuth',
'social_core.backends.google.GoogleOpenId',
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.google.GoogleOAuth',
'social_core.backends.twitter.TwitterOAuth',
'social_core.backends.facebook.FacebookOAuth2',
'social_core.backends.github.GithubOAuth2',
]
我还使用了 UserCreationForm
进行注册,
class SignupForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=True, help_text='Required.')
last_name = forms.CharField(max_length=30, required=True, help_text='Required.')
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2' )
这是视图文件,
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_pass = form.cleaned_data.get('password')
user = authenticate(request, username=username, password=raw_pass)
login(request,user,backend='django.contrib.auth.backends.ModelBackend')
url = reverse('location:get_location')
print("location_url ", url)
return HttpResponseRedirect(url)
else:
form = SignupForm()
return render(request, 'signup.html', {'form':form})
现在,当我单击表单上的注册按钮时,会出现此错误
Now, I get this error when i click signup button on my form,
'AnonymousUser' object has no attribute '_meta'
login(request,user,backend='django.contrib.auth.backends.ModelBackend')
为什么?
我可以在管理面板中看到该用户已被保存。
I can see in my admin panel that user has been saved.
是什么导致此错误?以及如何解决?
What is causing this error ? and how to solve it ?
编辑-
Internal Server Error: /signup/
Traceback (most recent call last):
File "/home/luvpreet/Envs/weather/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/luvpreet/Envs/weather/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/luvpreet/Envs/weather/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/luvpreet/Desktop/drf-vogo/weather/weather/pilot/views.py", line 45, in signup
login(request,user,backend='django.contrib.auth.backends.ModelBackend')
File "/home/luvpreet/Envs/weather/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 154, in login
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
File "/home/luvpreet/Envs/weather/local/lib/python2.7/site-packages/django/utils/functional.py", line 239, in inner
return func(self._wrapped, *args)
AttributeError: 'AnonymousUser' object has no attribute '_meta'
推荐答案
您已经有该用户保存表单时,无需调用身份验证
,因为在调用 login()$ c $时已经提供了后端c>:
You already have the user when you save the form, so you don't need to call authenticate
since you already provide the backend when calling login()
:
user = form.save()
login(request, user, backend='django.contrib.auth.backends.ModelBackend')
这篇关于Django'AnonymousUser'对象没有属性'_meta'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文