2016-03-24 11 views
-1

私はDjangoでウェブサイトの開発を学ぶ本を使用しています。Djangoはフォームエラーを表示できません

githubのfallowingパスSource codeからソースコードをダウンロードしました。私はWindowsマシンでアプリケーションを実行することができます。

何らかの理由で、ログイン後または登録時に送信後にエラーが発生すると、これらのエラーはではなく、がhtmlページに表示されます。

問題の原因を教えてください。

{% extends "base.html" %} 
{% block title %}User Registration{% endblock %} 
{% block head %}User Registration{% endblock %} 
{% block content %} 
    print "ddd" 
    {% if form.has_errors %} 
     <p>Your username and password didn't match. 
      Please try again.</p> 
    {% endif %} 

    <form method="post" action=""> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="register" /> 
    </form> 
{% endblock %} 

ログインページコード:

{% extends "base.html" %} 
{% block title %}User Login{% endblock %} 
{% block head %}User Login{% endblock %} 
{% block content %} 
    {% if form.has_errors %} 
     <p>Your username and password didn't match. 
      Please try again.</p> 
    {% endif %} 
    <form method="post" action=""> 
     {% csrf_token %} 
     <p><label for="id_username">Username:</label> 
      {{ form.username }}</p> 
     <p><label for="id_password">Password:</label> 
      {{ form.password }}</p> 
     <input type="submit" value="login" /> 
     <input type="hidden" name="next" value="/" /> 
    </form> 
{% endblock %} 
私は、ブラウザのコンソールで見たものの一つobeserationは、エラーメッセージ

def register_page(request): 
    form = RegistrationForm(request.POST or None) 
    print request.method 
    if request.method == 'POST' and form.is_valid(): 
     user = User.objects.create_user(
      username=form.cleaned_data['username'], 
      password=form.cleaned_data['password1'], 
      email=form.cleaned_data['email'] 
     ) 
     return HttpResponseRedirect('/register/success/') 
    else: 
     form = RegistrationForm() 
    variables = RequestContext(request, {'form': form}) 
    print variables 
    return render_to_response('registration/register.html', variables) 

登録ページのHTMLコードを表示するコードの

次の行であります

form.py

import re 

from django.core.exceptions import ObjectDoesNotExist 
from django.contrib.auth.models import User 
from django import forms 


class RegistrationForm(forms.Form): 
    print 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() 
    ) 

    # password validation: 
    def cleaned_password2(self): 
     # all valid values are accessible trough self.clean_data 
     if 'password1' in self.cleaned_data: 
      password1 = self.cleaned_data['password1'] 
      password2 = self.cleaned_data['password2'] 
      if password1 == password2: 
       return password2 
     raise forms.ValidationError('Passwords do not match.') 

    # username validation 
    def cleaned_username(self): 
     username = self.cleaned_data['username'] 
     if not re.search(r'^\w+$', username): 
      raise forms.ValidationError('Username can only contain alphanumeric characters and the underscore.') 
     try: 
      User.objects.get(username=username) 
     except ObjectDoesNotExist: 
      return username 
     raise forms.ValidationError('Username is already taken.') 


class BookmarkSaveForm(forms.Form): 
    url = forms.URLField(
     label='URL', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    title = forms.CharField(
     label='Title', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 
    tags = forms.CharField(
     label='Tags', 
     widget=forms.TextInput(attrs={'size': 64}) 
    ) 

http://localhost:8000/static/style.css は、リソースの読み込みに失敗しました:サーバーが404の状態で応答し

+0

は、フォームのエラーを表示することになっているコードの一部を必要とするだろう。 –

+0

私はpython2.7とdjango1.9.xを使用しています – niran

答えて

1

コードは単に間違っている(見つかりません)。空 - - それらのもののいずれかが偽である場合、フォーム作成された1つのチェックにmethod == 'POST'form.is_valid()を組み合わせることにより

、彼らは新しいがあることを保証するしています。メソッドが "POST"に等しくない場合、空のフォームを作成するだけです。フォームが有効でない場合は、エラーを含むので、無効なフォームをテンプレートに戻す必要があります。

だからあなたは二つの別々のif文で、通常のパターンに従う必要があります。私は同じ問題を抱えてRemenber

def register_page(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = User.objects.create_user(
       username=form.cleaned_data['username'], 
       password=form.cleaned_data['password1'], 
       email=form.cleaned_data['email'] 
      ) 
      return HttpResponseRedirect('/register/success/') 
     else: 
      form = RegistrationForm() 
     variables = RequestContext(request, {'form': form}) 
+0

私は提案に従って変更しましたが、まだエラーは表示されません – niran

0

、私がやった事はある: 使用self.add_errorはにエラーを添付しますフォーム内の特定のフィールド。このような代わりforms.ValidationErrorのコールadd_error()()、:

パスワード確認:

def cleaned_password2(self): 
     # all valid values are accessible trough self.clean_data 
     if 'password1' in self.cleaned_data: 
      password1 = self.cleaned_data['password1'] 
      password2 = self.cleaned_data['password2'] 
      if password1 == password2: 
       return password2 
     msg = 'Passwords do not match.' 
     self.add_error('password1',msg) 
+0

質問にpyコードが追加されました – niran

関連する問題