2017-06-11 16 views
0

次の形式を検証していない理由を誰もが知っているだろう:Django登録ビューで検証フォームがありませんか?

forms.py:

class UserRegistrationForm(UserCreationForm): 
    required_css_class = 'required' 
    username = forms.CharField(label='Username') 
    email = forms.EmailField(label='Email') 
    password = forms.CharField(label='Password') 
    password2 = forms.CharField(label='Password2') 

    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'username', 'email') 

    def __init__(self, *args, **kwargs): 
     super(UserRegistrationForm, self).__init__(*args, **kwargs) 
     self.fields['username'].widget = TextInput(attrs={'placeholder': 'Username'}) 
     self.fields['username'].required = True 
     self.fields['username'].error_messages = {'required': 'Please enter your username'} 

     self.fields['email'].widget = EmailInput(attrs={'placeholder': 'Email'}) 
     self.fields['email'].required = True 
     self.fields['email'].error_messages = {'required': 'Please enter your email'} 

     self.fields['first_name'].widget = TextInput(attrs={'placeholder': 'Forename'}) 
     self.fields['first_name'].required = True 
     self.fields['first_name'].error_messages = {'required': 'Please enter your first name'} 

     self.fields['last_name'].widget = TextInput(attrs={'placeholder': 'Surname'}) 
     self.fields['last_name'].required = True 
     self.fields['last_name'].error_messages = {'required': 'Please enter your last name'} 

     self.fields['password'].widget = PasswordInput(attrs={'placeholder': 'Password'}) 
     self.fields['password'].required = True 
     self.fields['password'].error_messages = {'required': 'Please enter your Password'} 

     self.fields['password2'].widget = PasswordInput(attrs={'placeholder': 'Confirm password'}) 
     self.fields['password2'].required = True 
     self.fields['password2'].error_messages = {'required': 'Please confirm your Password'} 

    def cleaned_username(self): 
     username = self.cleaned_data.get('username') 
     username_qs = User.objects.filter(username=username) 
     if username_qs.exists(): 
      raise forms.ValidationError("I'm sorry, that username already exists.") 

    def cleaned_email(self): 
     email = self.cleaned_data.get('email') 
     email_qs = User.objects.filter(email=email) 
     if email_qs.exists(): 
      raise forms.ValidationError("I'm sorry, this email has already been taken.") 

    def cleaned_password2(self): 
     password = self.cleaned_data.get('password') 
     password2 = self.cleaned_data.get('password2') 

     if password != password2: 
      raise forms.ValidationError("Your passwords do not match.") 

をtemplates.html:

<form class="contact-form" name="contact-form" method="POST" action="." enctype='multipart/form-data'> 
    <div class="form-group"> 
    {% csrf_token %} 
    <input class="form-control" type="text" name="{{ form.first_name.name }}" {% if form.first_name.value %}value="{{ form.first_name.value }}"{% endif %} placeholder="Forename"/> 
    {% if form.firstname.errors %}<span class="form-error error-above">{{ form.first_name.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.last_name.name }}" {% if form.last_name.value %}value="{{ form.last_name.value }}"{% endif %} placeholder="Surname"/> 
    {% if form.lastname.errors %}<span class="form-error error-above">{{ form.last_name.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.username.name }}" {% if form.username.value %}value="{{ form.username.value }}"{% endif %} placeholder="Username"/> 
    {% if form.username.errors %}<span class="form-error error-above">{{ form.username.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.email.name }}" {% if form.email.value %}value="{{ form.email.value }}"{% endif %} placeholder="Email"/> 
    {% if form.email.errors %}<span class="form-error error-above">{{ form.email.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="password" name="{{ form.password.name }}" {% if form.password.value %}value="{{ form.password.value }}"{% endif %} placeholder="Password"/> 
    {% if form.password.errors %}<span class="form-error error-above">{{ form.password.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="password" name="{{ form.password2.name }}" {% if form.password2.value %}value="{{ form.password2.value }}"{% endif %} placeholder="Confirm Password"/> 
    {% if form.password2.errors %}<span class="form-error error-above">{{ form.password2.errors.as_text }}</span>{% endif %} 
    <button type="submit" class="btn btn-primary" value='{{ title }}'>Sign Up</button> 
</form> 

形だけで、検証されていない - 私はそれができたと思いますtemplates.htmlと何か関係がありますが、エラーが戻されていないことを正確に知るのは難しいです。私が入力した詳細は、私が定義したコントロールの流れに従ってすべて正しいと確信しています。

views.py:

def register(request): 
    title = "Register" 
    if request.method == 'POST': 
     form = UserRegistrationForm(request.POST or None) 
     if form.is_valid(): 
      print("The form is valid!") 
      user = form.save(commit=False) 
      user_passsword = form.cleaned_data.get('password') 
      user.set_password(user_password) 
      user.save() 

      return render(request, 'blog/post/list.html', { 'user': user, 'title': title }) 
    else: 
     print("The form is not valid!") 
     form = UserRegistrationForm() 

    return render(request, 'oauth/user/registration_form.html', { 'form': form, 'title': title }) 

助けてください!私はちょうど私が間違ってしまったのか分からない。私がしようとするものはすべて「私の体には正しい形ではない!ターミナルで - 私はちょうどこの犬のフォームを検証することはできません。私は何が欠けていますか? :(

+1

1)あなたはform.errors' 'での検証エラーを見ることができるテンプレートでこの一回

def register(request): title = "Register" if request.method == 'POST': form = UserRegistrationForm(request.POST or None) if form.is_valid(): print("The form is valid!") user = form.save(commit=False) user_passsword = form.cleaned_data.get('password') user.set_password(user_password) user.save() return render(request, 'blog/post/list.html', { 'user': user, 'title': title }) else: print("The form is not valid!") else: form = UserRegistrationForm(request.POST) return render(request, 'oauth/user/registration_form.html', { 'form': form, 'title': title }) 

を試してみてください(これは明白なものでなければなら)、2)ページが再描画されたときにエラーがなくなる(空白のデータがない新しいフォーム)ので、空白のフォーム( 'form = UserRegistrationForm()')を返さないでください。無効なフォームをコンテキストに入れます( 'form = UserRegistrationForm(request.POST or None)')。 –

+0

必須のフィールドを埋めるために関連データが不足しているようです。 @JensAstrupが述べたように、 'form.errors'でデバッグを試みてください。それは 'mandatory'と' missing'フィールドを与えます。 – cutteeth

答えて

1

<form class="contact-form" name="contact-form" method="POST" action="." enctype='multipart/form-data'> 
    <div class="form-group"> 
    {% csrf_token %} 
    <input class="form-control" type="text" name="{{ form.first_name.name }}" {% if form.first_name.value %} value="{{ form.first_name.value }}" {% endif %} placeholder="Forename"/> 
    {% if form.firstname.errors %}<span class="form-error error-above">{{ form.first_name.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.last_name.name }}" {% if form.last_name.value %} value="{{ form.last_name.value }}" {% endif %} placeholder="Surname"/> 
    {% if form.lastname.errors %}<span class="form-error error-above">{{ form.last_name.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.username.name }}" {% if form.username.value %} value="{{ form.username.value }}" {% endif %} placeholder="Username"/> 
    {% if form.username.errors %}<span class="form-error error-above">{{ form.username.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="text" name="{{ form.email.name }}" {% if form.email.value %} value="{{ form.email.value }}" {% endif %} placeholder="Email"/> 
    {% if form.email.errors %}<span class="form-error error-above">{{ form.email.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="password" name="{{ form.password.name }}" {% if form.password.value %} value="{{ form.password.value }}" {% endif %} placeholder="Password"/> 
    {% if form.password.errors %}<span class="form-error error-above">{{ form.password.errors.as_text }}</span>{% endif %} 
    <input class="form-control" type="password" name="{{ form.password2.name }}" {% if form.password2.value %} value="{{ form.password2.value }}" {% endif %} placeholder="Confirm Password"/> 
    {% if form.password2.errors %}<span class="form-error error-above">{{ form.password2.errors.as_text }}</span>{% endif %} 
    <button type="submit" class="btn btn-primary" value='{{ title }}'>Sign Up</button> 
    </div> 
</form> 
+0

まだ動作していません。 templates.html私も提供しているテンプレートを見てください - これは正しいか? –

+0

まだフォームが有効ではありませんか? – Exprator

+0

Yeh - それでも出力します。本当にこれを理解することはできません!私はすべてのチュートリアルを可能な限り正確に追跡してきましたが、何も動作していないようです - 私がやっているのは、フォーム自体のhtmlをカスタマイズすることだけです。 (私はPython 3.6を使用していますか?Django 1.11.1 ...) –

関連する問題