2011-10-24 7 views
0

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を呼び出そうとしていたいくつかのレガシーコードがありました。コメントありがとう、私はこの質問を閉じるつもりです。

+0

私はあなたが後続のスラッシュを見逃したと思います。あなたのフォームにurl(r '^ register/$'、 'authentication.views.register')のaction = "/ register /">を使用してください。 – hymloth

+0

同じ結果ではありません。 –

+0

上記のviews.pyにインデントがないのですか?それをstackoverflowにコピーするときの誤植ですか? – jcfollower

答えて

-1

明示的に設定しない限り、Djangoのdevserverは127.0.0.1:8000にあなたのページを提供します。

あなたのPOST URLからは、おそらくApache経由でhttp://localhost:8000に提供されるように設定されたPHPアプリケーションがあるとしか思えません。

+0

いいえ、私はDjangoのページにアクセスするためにかなり完全にlocalhost:8000を使っています。さらに、フォームが正しく表示されるページにアクセスできました。これはhttp:// localhost:8000 /にあります。しかし、考えをありがとう。 –

+2

@Béres、localhost **は** 127.0.0.1です。 –

関連する問題