2014-01-29 38 views
1

我創建用戶身份驗證的形式,對輸入數據並提交,我得到這個錯誤:在 AttributeError的/註冊/ ‘RegistrationForm’對象有沒有屬性‘用戶名’ 在`用戶名= form.username, 我已經檢查了所有的解決方案與相同的問題,並應用他們,但沒有人解決它(如is_valid())。我該如何解決它?這裏是代碼:AttribueError:RegistrationForm」對象有沒有屬性‘用戶名’

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) 

forms.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.') 
+0

請修復您的縮進。目前'RegistrationForm'沒有任何屬性。 – IanAuld

回答

3

cleaned_data,不clean_data

username = form.cleaned_data['username'] 

這樣做對其他形式的數據,以及像密碼1和電子郵件。

一些背景的原因可以在Django documentation找到。基本上,這些方法被稱爲clean_fieldname,但清洗後數據在cleaned_fieldname。注意區別。

+0

只是在view.py或其他form.py也??? –

+0

只是增加了一些信息。你應該到處去做。 'clean_fieldname'是一種方法,而'cleaned_fieldname'是你想要的。 – tayfun

+1

這個錯誤被刪除,但他們得到另一個: TypeError at/register/success/ __init __()只需要1個參數(給出3) traceback:response = wrapped_callback(request,* callback_args,** callback_kwargs) –

相關問題