2017-09-14 11 views
0

ログインページから管理ページにジャンプするとき、URLアドレスが管理ページに変更される必要があります。テンプレートをリダイレクトしてレンダリングした場合、どのようにリクエストを渡すことができますか?

レンダリング管理ページのみを使用している場合、URLアドレスは変更されないため、このpostではOptimusCrimeの妥当な回答が得られます。

リダイレクトしてテンプレートをレンダリングすると、ログインページから管理ページにリクエストを渡すことができません。ログインページのviews.pyで

:管理者ページのviews.pyで

... 
return redirect('/app_admin/index/') 

... 
return render(request, 'app_admin/index.html') # there the request is None. 

がどのように管理ページのviews.pyに要求を渡すことができますか?

+0

あなたは本当にHTTPプロトコルの仕組みを学ぶべきだと思うべきです... –

答えて

1

ログインハンドラを作成する方法について説明しているthis oneなど、いくつかの基本的なDjangoチュートリアルを見てください。

要旨はこれです:

ユーザーがフォームを送信、ユーザー名および/またはパスワードを評価ビューで。正しい情報(ユーザ名とパスワード)を提出した場合は、この情報をセッションに保存してください。ログインした(制限された)領域にユーザーをリダイレクトし、セッションを確認します。セッションに正しい情報がある場合は、ユーザーにコンテンツを表示させます。そうでない場合は、ユーザーをリダイレクトします。

簡単なログイン・ロジック(説明):

def login(request): 
    m = Member.objects.get(username=request.POST['username']) 
    if m.password == request.POST['password']: 
     # Username and password is correct, save that the user is logged in in the session variable 
     request.session['logged_in'] = True 
     request.session['username'] = request.POST['password'] 
     # Redirect the user to the admin page 
     return redirect('/app_admin/index/') 
    else: 
     # Username and/or password was incorrect 
     return HttpResponse("Your username and password didn't match.") 

シンプルな管理ページロジック(説明):これらは、2つの異なるビュー(およびURL)であることを

def admin_index(request): 
    # Make sure that the user is logged in 
    if 'logged_in' in request.session and request.session['logged_in']: 
     # User is logged in, display the admin page 
     return render(
      request, 
      'app_admin/index.html', 
      {'username': request.session['username']} 
     ) # You can now use {{ username }} in your view 
    # User is not logged in and should not be here. Display error message or redirect the user to the login page 
    return HttpResponse("You are not logged in") 

が。なお、 urlpatternsにマップする必要があります。

+0

私は '/ app_admin/index /'でパスワードを使いたいのですが、私はセッションにパスワードを保存すべきですか? '/ login /'でパスワードを使うのが良いでしょう。 – 244boy

+0

ユーザーをログインさせるだけでなく、ユーザーのパスワードを使用しないでください。必要な情報をセッション変数に保存できます。現在のユーザー名を保存する私の更新された回答を参照してください。 – OptimusCrime

+0

私は他のアプリケーションに接続するためにパスワードを使用するので、/ login /で接続します。ありがとう、ありがとうございます。 – 244boy

関連する問題