2016-09-26 11 views
-2

で動作します私はDjangoのために新たなんだと私はモデルとPOSTフォームデータを処理する方法についてのジャンゴからチュートリアルを以下ましたジャンゴrequest.POSTデータが空であるが、他の同様の形式

https://docs.djangoproject.com/en/dev/topics/forms/#using-a-form-in-a-view

I簡単なログインのためにそれを行うことができました、そして、私はコンソールの変数を印刷することができます。 form.is_valid()関数はtrueで、ログインビューに期待どおりに機能します。

私は登録ページと同じことをしましたが、is_valid()関数からFALSEが返されています。私はcsrfトークンを手直ししていましたが、それは問題を引き起こしているようではなかったので、なぜ私はそれらを必要としませんでした。

私はリクエストを得ることができるので、愚かな問題になるだろうと思う。ログインケースではポストが、登録ではない。どんな助けもありがとうございます。ここで

はここに私のhtmlフォーム

<div id="login" class="animate form"> 
         <form action="/signin" autocomplete="on" method ="POST"> 
          <!--{% csrf_token} --> 
          <h1>Log in</h1> 
          <p> 
           <label for="username" class="uname" data-icon="u" > Your email or username </label> 
           <input id="username" name="username" required="required" type="text" placeholder="myusername or [email protected]"/> 
          </p> 
          <p> 
           <label for="password" class="youpasswd" data-icon="p"> Your password </label> 
           <input id="password" name="password" required="required" type="password" placeholder="eg. X8df!90EO" /> 
          </p> 
          <p class="keeplogin"> 
       <input type="checkbox" name="loginkeeping" id="loginkeeping" value="loginkeeping" /> 
       <label for="loginkeeping">Keep me logged in</label> 
      </p> 
          <p class="login button"> 
           <input type="submit" value="Login" /> 

<div id="register" class="animate form"> 
         <form action="/register" autocomplete="on" method ="POST"> 
          <!--{% csrf_token %} --> 
          <h1> Sign up </h1> 
          <p> 
           <label for="usernamesignup" class="uname" data-icon="u">Your username</label> 
           <input id="usernamesignup" name="usernamesignup" required="required" type="text" placeholder="mysuperusername690" /> 
          </p> 
          <p> 
           <label for="emailsignup" class="youmail" data-icon="e" > Your email</label> 
           <input id="emailsignup" name="emailsignup" required="required" type="email" placeholder="[email protected]"/> 
          </p> 
          <p> 
           <label for="passwordsignup" class="youpasswd" data-icon="p">Your password </label> 
           <input id="passwordsignup" name="passwordsignup" required="required" type="password" placeholder="eg. X8df!90EO"/> 
          </p> 
          <p> 
           <label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Please confirm your password </label> 
           <input id="passwordsignup_confirm" name="passwordsignup_confirm" required="required" type="password" placeholder="eg. X8df!90EO"/> 
          </p> 
          <p class="signin button"> 
       <input type="submit" value="Sign up"/> 

あるforms.pyここ

from django import forms 
from django.forms import CharField 

class NameForm(forms.Form): 
    username = forms.CharField(label = 'username', max_length=25) 
    password = forms.CharField(label = 'password', max_length=25) 


class RegForm(forms.Form): 
    regName = forms.CharField(label = 'usernamesignup', max_length = 25) 
    regEmail = forms.CharField(label = 'emailsignup', max_length = 50) 
    regPassword = forms.CharField(label = 'passwordsignup', max_length = 30) 
    regPasswordConfirm = forms.CharField(label = 'passwordsignup_confirm', max_length = 30) 

にログイン/登録を処理していますviews.pyされている

@csrf_exempt 
def signin(request): 
    #if this is a POST request we need to process the login credentials 
    if request.method == 'POST': 
     #create the form instance and populate with username/password 
     form = NameForm(request.POST) 
     #verify 
     print form 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      print username 
      print password 
      return render(request, 'webServer/home.html') 
     else: 
      return render(request, 'webServer/login.html') 
    else: 
     return render(request, 'webServer/login.html') 

@csrf_exempt 
def register(request): 
    if request.method == 'POST': 
     #create form instance and grab register credentials 
     form2 = RegForm(request.POST) 
     #verify not a duplicate entry (email, username) 
     print form2 
     if form2.is_valid(): 
      username = form2.cleaned_data['regPassword'] 
      return render(request, 'webServer/home.html') 
     else: 
      print 'had error' 
      return render_to_response('webServer/errors.html', {'form': form2}) 
    else: 
     return render(request, 'webServer/login.html') 
(これは草稿です)
+0

フォームに問題がありますか?なぜPOSTは空だと思いますか? is_validがFalseを返す場合、 'form.errors'には何が含まれていますか?なぜテンプレートにエラーを表示しないのですか? –

+0

申し訳ありませんが、私は疑問があると思いました。登録用紙に問題があります。私はform2を印刷するとき、私は入力がないので、POSTは空です。テンプレートのエラーは、フィールドが空であることを示します。 – user1050632

答えて

1

フォームからテンプレートに完全に異なるフィールド名を使用しているようです - フォームにがあります、regEmailなどが、いずれの場合もusernamesignupなど

を持っているテンプレートは、あなたが出力にフィールドフォームオブジェクトそのものを使用する必要があります。

{{ form.regName.label_tag }} 
{{ form.regName }} 
{{ form.regName.errors }} 
+0

それは問題です。フィールド名とテンプレート名が一致しませんでした。 regName ....から対応するテンプレート名に名前を変更すると、問題が修正されました。私は彼らが一致しなければならなかったことを知らなかった – user1050632

関連する問題