'UserCreationForm' 对象没有属性 'get_username' django 1.8
'UserCreationForm' object has no attribute 'get_username' django 1.8
所以我是 django 的新手,知道 python 足以不称自己为初学者,但我绝不是专业人士。我只是想让用户身份验证在一个小的 django 应用程序上工作。我正在使用默认身份验证系统 https://docs.djangoproject.com/en/1.8/topics/auth/default/ 和内置表单、登录、注销等都有自己的视图,但 UserCreationForm 没有自己的视图,所以我想我必须自己制作。不知道我做错了什么。
这是我的views.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} )
~
这是我的register.html
<!DOCTYPE html>
<html>
<head>
<title>Jet!</title>
</head>
<body>
{% if registered %}
Jet! says Thank you for registering!
<a href='/'>Return to the homepage.</a><br />
{% else %}
<form method="post" action="/register/">
{% csrf_token %}
{{ user_form.as_p }}
<input type="submit" name="submit" value="Register" />
</form>
{% endif %}
</body>
</html>
首先,行 username = user_form.get_username()
给出了一个错误,因为正如消息所说,表单没有 get_username
方法。您可以使用 user_form.cleaned_data['username']
访问用户名
其次,行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
方法
from django.contrib.auth import authenticate, login
请注意,您尚未在代码中的任何位置设置 registered=True
。通常,在成功提交表单后重定向是一种很好的做法,以防止重复提交。
将 user_form.get_username() 更改为 request.user.username
username = user_form.get_username() = request.user.username
所以我是 django 的新手,知道 python 足以不称自己为初学者,但我绝不是专业人士。我只是想让用户身份验证在一个小的 django 应用程序上工作。我正在使用默认身份验证系统 https://docs.djangoproject.com/en/1.8/topics/auth/default/ 和内置表单、登录、注销等都有自己的视图,但 UserCreationForm 没有自己的视图,所以我想我必须自己制作。不知道我做错了什么。
这是我的views.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} )
~
这是我的register.html
<!DOCTYPE html>
<html>
<head>
<title>Jet!</title>
</head>
<body>
{% if registered %}
Jet! says Thank you for registering!
<a href='/'>Return to the homepage.</a><br />
{% else %}
<form method="post" action="/register/">
{% csrf_token %}
{{ user_form.as_p }}
<input type="submit" name="submit" value="Register" />
</form>
{% endif %}
</body>
</html>
首先,行 username = user_form.get_username()
给出了一个错误,因为正如消息所说,表单没有 get_username
方法。您可以使用 user_form.cleaned_data['username']
其次,行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
方法
from django.contrib.auth import authenticate, login
请注意,您尚未在代码中的任何位置设置 registered=True
。通常,在成功提交表单后重定向是一种很好的做法,以防止重复提交。
将 user_form.get_username() 更改为 request.user.username
username = user_form.get_username() = request.user.username