“UserCreationForm”对象没有属性“get_username”Django

2024-06-30 16:40:31 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我是django的新手,对python的了解不足以称自己为初学者,但我绝不是专业人士。我只是想让一个小的django应用程序使用用户身份验证。我使用的是默认的身份验证系统https://docs.djangoproject.com/en/1.8/topics/auth/default/,内置的表单、登录、注销等都有自己的视图,但是UserCreationForm没有自己的视图,所以我想我必须创建自己的视图。不知道我做错了什么。在

这是我的视图.py在

  1 from django.shortcuts import render
  2 from django.http import HttpResponse
  3 from django.contrib.auth.forms import UserCreationForm
  4 from django.contrib.auth import login
  5
  6 def home(request):
  7         return HttpResponse("This is a barebones homepage")
  8
  9 def register(request):
 10         registered = False
 11
 12         if request.method == 'POST':
 13                 user_form = UserCreationForm(data=request.POST)
 14
 15                 if user_form.is_valid():
 16                         user = user_form.save()
 17                         username = user_form.get_username()
 18                         password = user_form.clean_password2()
 19                         login(request,user)
 20                 else:
 21                         print user_form.errors
 22         else:
 23                 user_form = UserCreationForm()
 24
 25         return render(request, 'registration/register.html', {'user_form': user_form, 'registered': registered}    )
~

这是我的注册.html在

^{pr2}$

Tags: djangofromimportformauth身份验证视图request
2条回答

更改用户_form.get_用户名()至请求.用户.用户名在

username = user_form.get_username() = request.user.username

首先,行username = user_form.get_username()给出了一个错误,因为正如消息所说,表单没有get_username方法。您可以使用user访问用户名_已清理的数据['用户名']

其次,行password = user_form.clean将给出一个错误,因为表单没有属性clean。如果需要,可以使用user_form.cleaned_data['password1']password1字段中获取值。在

login用户之前,必须对其进行身份验证,否则将得到一个关于用户没有属性backend的错误。在

综合起来,你有:

if user_form.is_valid():
    user_form.save()
    username = user_form.cleaned_data['username']
    password = user_form.cleaned_data['password1']
    user = authenticate(username=username, password=password)
    login(request, user)

您必须通过将导入更改为来导入authenticate方法:

^{pr2}$

请注意,您没有在代码中的任何地方设置registered=True。通常,在表单成功提交后重定向是一个很好的做法,以防止重复提交。在

相关问题 更多 >