python - 属性错误:RegistrationForm' object has no attribute 'username'

标签 python django

我正在创建用户身份验证表单,在输入数据并提交时,出现此错误: /注册/处的属性错误 “RegistrationForm”对象没有属性“用户名” 在`用户名=form.用户名, 我已经检查了具有相同问题的所有解决方案并应用了它们,但没有人解决它(就像 is_valid() )。我怎样才能做到正确?这是代码:

from django.http import HttpResponse
 def register_page(request):
 if request.method == 'POST':
   form = RegistrationForm(request.POST)
   if form.is_valid():
     user = User.objects.create_user(
       username=form.clean_data['username'],
       password=form.clean_data['password1'],
       email=form.clean_data['email'])
     return HttpResponseRedirect('/register/success/')
 else:
   form = RegistrationForm()
 variables = RequestContext(request, {
    'form': form})
 return render_to_response(
   'registration/register.html',
   variables)
  def logout_page(request):
 logout(request)
 return HttpResponseRedirect('/')

 def main_page(request):
 return render_to_response(
  'main_page.html', RequestContext(request))

 def user_page(request, username):
 try:
   user = User.objects.get(username=username)
 except:
   raise Http404('Requested user not found.')
 bookmarks = user.bookmark_set.all()
 template = get_template('user_page.html')
 variables = RequestContext(request, {
   'username': username,
   'bookmarks': bookmarks
 })
 output = template.render(variables)
 return HttpResponse(output)

表单.py

import re

 class RegistrationForm(forms.Form):
 username = forms.CharField(label='Username', max_length=30)
 email = forms.EmailField(label='Email')
 password1 = forms.CharField(
    label='Password',
    widget=forms.PasswordInput()
 )
 password2 = forms.CharField(
    label='Password (Again)',
    widget=forms.PasswordInput())
 def clean_password2(self):
   if 'password1' in self.clean_data:
     password1 = self.clean_data['password1']
     password2 = self.clean_data['password2']
     if password1 == password2:
       return password2
   raise forms.ValidationError('Passwords do not match.')
 def clean_username(self):
 username = self.clean_data['username']
 if not re.search(r'^\w+$', username):
   raise forms.ValidationError('Username .')
 try:
   User.objects.get(username=username)
 except ObjectDoesNotExist:
   return username
 raise forms.ValidationError('Username is already taken.')

最佳答案

它的clean_data,而不是clean_data:

username = form.cleaned_data['username']

对其他表单数据也执行此操作,例如密码1和电子邮件。

有关此原因的一些背景信息可以在 Django documentation 中找到。 。基本上,这些方法称为 clean_fieldname,但清理后数据位于 cleaned_fieldname 中。请注意区别。

关于python - 属性错误:RegistrationForm' object has no attribute 'username' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21434688/

相关文章:

python - Django + GoogleAppEngine 错误 : DJANGO_SETTINGS_MODULE is undefined

python - py2exe MemoryLoadLibrary 加载 _ssl.pyd 失败,Win7<->Win10

python - 如何在条形图上显示自定义值

python - PHP 开发人员如何开始使用 MAMP 和 Python?

python - 如何在Python中找到Kmeans++聚类的拟合度

python - 如何显式引用字符串值(Python DB API/Psycopg2)

python - os.open 不使用给定的权限模式创建文件

django - 通过 Django 配置和使用 structlog

python - 在 Django 中渲染数据库中的自定义模板标签

django - 如何将日期选择器与 django-filter 一起使用?