Djangoのdjango.contrib.auth.forms
モジュール、具体的にはUserCreationForm
クラスを使用しています。これは、ページ上うまく表示さDjangoは私のフォームをフォームの "アクション"とは別の場所にリダイレクトするのはなぜですか?
<form id="registration" method="post" action="/register">
{% csrf_token %}
<table class="float_left">
<tr><th><label for="id_username">Username:</label></th><td>{{ register_form.username }}</td></tr>
<tr><th><label for="id_password1">Password:</label></th><td>{{ register_form.password1 }}</td></tr>
<tr><th><label for="id_password2">Confirm Password:</label></th><td>{{ register_form.password2 }}</td></tr>
</table>
<input class="float_right button_input" type="submit" value="Register" />
</form>
:
はここregister_form
が空UserCreationForm
保持views.py
から渡された変数である私のフォームのテンプレートverionです。アクションは"/register"
に設定されていることに注意してください。しかし、送信ボタンをクリックしたときに何も起こっていませんでした。私は、Chromeの今まで、それほど便利なのJavaScriptコンソールを開いて、次の出力(Djangoのmanage.py
のdevのサーバー上で実行されている)を見た:
POST http://localhost:8000/includes/register.php 404 (NOT FOUND)
恐ろしいが。ここでDjango(または他の何か)がincludes
ディレクトリを私のパスに挿入したことに注意してください。データベースに新しいユーザを保存した後(フォームが有効だった場合/home
にするだけの非常にシンプルなリダイレクト
def register(request):
# csrf is used to prevent Cross-Site Request Forgeries (i.e. XSS attacks, SQL injections, etc.)
c = {}
c.update(csrf(request))
# if logged in, redirect to personal profile
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/home")
else:
c['register_form'] = UserCreationForm()
return render_to_response('authentication/register.html', c, context_instance=RequestContext(request))
:
urlpatterns = patterns('',
url(r'^register', 'authentication.views.register'),
)
そしてviews.py
:ここ
urls.py
から関連の抜粋です)、そうでなければ同じページに戻る(
authentication /register.html
が該当するテンプレートです)。
私は困惑しています。
私に教えてもらえることはありがとうございます。
編集:私はかなりの間今私が働いているDjangoアプリのドメインとしてhttp://localhost:8000/
を使用していることに注意してください。実際、このフォームは、UserCreationForm
の組み込みのas_table()
メソッドを使用して印刷していたときに、うまく動作していたようです。しかし、それは恐ろしい見えたので、私は手動でフォームの書式設定に切り替え、今は動作しません。私は<form>
タグを一度調整していません。私はまだ私が自動印刷される前にそれを供給しなければならなかった。
MAJOR EDIT:
NEVERMIND GUYS、私はそれを得ました。私がやっていることですDjangoに変換を開始する前にフォームの検証に使用されたいくつかの古いPHPを呼び出そうとしていたいくつかのレガシーコードがありました。コメントありがとう、私はこの質問を閉じるつもりです。
私はあなたが後続のスラッシュを見逃したと思います。あなたのフォームにurl(r '^ register/$'、 'authentication.views.register')のaction = "/ register /">を使用してください。 – hymloth
同じ結果ではありません。 –
上記のviews.pyにインデントがないのですか?それをstackoverflowにコピーするときの誤植ですか? – jcfollower