2016-03-29 4 views
1

ユーザーがログインまたはサインアップできるランディングページから始まるアプリを構築しています。私は正常にログインしたときに2つの異なるダッシュボードページに移動する2種類のユーザーを持っています(ユーザーの資格情報に基づいてどのユーザーがログインしているかわかります)。Djangoビューの連鎖/リダイレクトのベストプラクティス

私の質問はこのビューを扱う最良の方法です。私のログインビューには、どんな種類のユーザーがいるのかを知るロジックがあります。そのユーザーのダッシュボードのテンプレートを適切にレンダリングします。しかし、私はまた、ログインビューと同じテンプレートをレンダリングするダッシュボードの種類ごとに別々のビューを持っています。これは、ユーザーが「自宅」ボタンをクリックしたときや何を持っているかのためです。今のところ、ダッシュボードごとに2つのURL( 'login /'と 'dashboard_x /')があるので、私のログインビューを "受信したログイン資格情報に基づく適切なダッシュボードビュー。理想的には、ユーザーの種類をチェックして、要求を変更せずに適切なダッシュボードビューに渡すだけです。

答えて

1

ショートカットライブラリの条件付きDjangoリダイレクトを使用するだけでいいですか?そのためにはhereというドキュメントがあります。以下のような

何か:もちろん

from django.shortcuts import redirect 

def my_view(request): 
    if something: 
     return redirect('something-view') 
    elif something_else: 
     return redirect('something-else-view') 
    else: 
     # do something else 

あなたが使用しているビューの種類(ベースのクラスベース/機能)にこれを適応する必要があるだろう。

あなたが同じURLとビューを使用したい場合は、クエリパラメータとスイッチを行うことができます:

def my_view(request): 
    if something: 
     return redirect('something-view', type='thing') 
    elif something_else: 
     return redirect('something-view', type='else') 
    else: 
     # do something else 

次に、あなたの何かビューでのタイプのためのテスト。もちろん、あまり安全ではない(ユーザーは型パラメータを変更する可能性がある)ので、何かのユーザーが何かのユーザーの中にいたかどうかを確認して、 t。

最後に、オプション3は、両方を同じダッシュボードにリダイレクトすることで、ダッシュボードビュー内のユーザーの種類のチェックのみに依存して、表示される内容を判断します。これは、ロジックがサーバー上に保持され、ユーザーの制御から保護されるため、最も安全なオプションです。これはビューの非常に一般的なイディオムでもあります。たとえば、現在のユーザーがいるかどうかに応じて、多くのビューが異なる動作をするなどです。

関連する問題