Use*_*er0 5 django django-views django-authentication
大家好,所有你们都乐于助人(再见无帮助的人:D).我正在尝试在django(1.2.4)中创建用户,然后在保存后将其登录.我的问题是我收到了NotImplementedError并查看了由django.contrib.auth.models.AnonymousUser引发的回溯.这是我的视图代码的一部分:
def signup(request):
if request.method == 'POST': # If the form has been submitted...
p = request.POST
if not request.user.is_authenticated():
form = UserForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
form.save()
user=authenticate(username=p['username'],password=p['password'])
login(request,user)
return HttpResponseRedirect('/') # Redirect after POST
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,它正在尝试登录任何鼠标用户而不是我正在验证的用户,我该如何克服这个问题?
感谢PS用户正在数据库中创建,它不会使用此代码登录.
追溯:
环境:
请求方法:POST
请求URL:http:// localhost:8000/signup /
Django版本:1.2.4
Python版本:2.6.1
已安装的应用程序:
['django.contrib.auth',
'django.contrib.contenttypes' ,
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.admindocs',
'django_extensions',
' REDACTED_APPs ',已安装中间件:('django.middleware.common.CommonMiddleware','django.middleware.locale.LocaleMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django. contrib.messages.middleware.MessageMiddleware','django.contrib.sessions.middleware.SessionMiddleware')
Traceback:
File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File "REDACTED/views.py" in signup
19. login(request,user)
File "/Library/Python/2.6/site-packages/django/contrib/auth/__init__.py" in login
71. user.save()
File "/Library/Python/2.6/site-packages/django/contrib/auth/models.py" in save
430. raise NotImplementedError
Exception Type: NotImplementedError at /signup/
Exception Value:
Run Code Online (Sandbox Code Playgroud)
我认为这里发生的authenticate是返回None,因此login正在使用request.user(a AnonymousUser).
看起来用于创建用户的信息与您传递给的信息不同authenticate.我会仔细检查用户是否正确保存(尤其是密码).
编辑:从其他答案我看到您正在使用自定义用户表单.您应该使用django.contrib.auth.forms.UserCreationForm,它的save()方法将正确设置密码.
如果没有手动设置后端属性,下面的方法就无法工作,比后代更麻烦
轻松的是跳过这里的验证步骤(它没有添加任何重要的东西)
user = UserForm.save()
login(request, user)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6478 次 |
| 最近记录: |