2016-08-17 33 views
1

正常に登録されると、ユーザーはテンプレート 'registration_done.html'にリダイレクトされます。ジャンゴ登録|変更動作

この動作を変更して、ユーザーを登録ページにリダイレクトしてメッセージを表示する方法はありますか?

私はこれらのコードを試してみましたが、これを変更するにはさまざまな方法を試しましたが、さまざまな種類のエラーがあります。

urls.py

url(r'^register/$', 
     views.register, 
     { 
      'success_url': '/accounts/register/?success=true' 
     }, 
     name='register'), 

view.py

def register(request): 
    if request.method == 'POST': 
     user_form = UserRegistrationForm(request.POST) 
     if user_form.is_valid(): 
      # Create a new user object but avoid saving it yet 
      new_user = user_form.save(commit=False) 
      # Set the chosen password 
      new_user.set_password(user_form.cleaned_data['password']) 
      # Save the User object 
      new_user.save() 
      success = request.GET.get('success', None) 
      return render(request, {'new_user': new_user, 'success': success}) 
    else: 
     user_form = UserRegistrationForm() 
    return render(request, 'account/register.html', {'user_form': user_form}) 

registration.html

{% if success %} 
     <p>{% trans 'Successfull registration!' %}</p> 
{% endif %} 

いただきまし間違っIした?!

エラー: '要求':

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
TypeError: register() got an unexpected keyword argument 'success_url' 
[18/Aug/2016 14:17:55] "GET /en/account/register/ HTTP/1.1" 500 59886 
+0

エラーは何ですか? –

+0

あなたはポストで見ることができるコードで、私はこのエラー 'TypeError/account/register/ register()に予期しないキーワード引数 'success_url'を持っていますが、私の仕事をする良い方法はありますか?あなたはどのように思いますか?! –

+0

ここにスタックトレースのようなものがあります。https://camo.githubusercontent.com/b26cf0dfe73d3bbf2e74fcae277c0b667930366f/687474703a2f2f692e696d6775722e636f6d2f326749644f4e352e706e67 –

答えて

1

あなたがsuccess_urlregister(request)あなたの機能

registerあなたの関数にkwargに合格しようとしているだけで一つの引数を受け入れます。

ですから、第二引数を受け入れることができますので、

def register(request, success_url): 
    ... 

のように、success_urlを言うしかし、やっても意味がありませんsuccess_urlが一定である場合に。その場合には、それだけではなく、ハードコードそれよりも、ここでもう一つのポイントは、あなたがreverse that urlにしたいということです、あなたのレジスタ機能

def register(request): 
    success_url = 'foo' 

定義します。

success = request.GET.get('success', None) 

すべてのユーザがGETリクエストで独自の成功変数を提出することができます:あなたはこれを使用する理由

はまた、私はよく分かりません。あなたはこれをフォームから期待していますか?ユーザーが単に要求に成功したと言うことができる場合、セキュリティの脆弱性のように見えます。

今では、最初のrender呼び出しからテンプレート名/パスが見つからないため、実際にはテンプレートを実際にはレンダリングしていません。

テンプレートを追加するか、別のページにリダイレクトしてください。

+0

それはもちろん悲しいことです。私は成功登録後に登録ページにリダイレクトしようとしましたが、フォームが消えましたが、メッセージがあります。奇妙に思える。 –

+0

どのようにリダイレクトしようとしましたか? –

+0

私はリダイレクトではない 'return render(request、 'account/register_done.html'、{'new_user':new_user、 'success':success})' –

関連する問題