1

同じURL(ホームページ)でも、ログインしているかどうかで違うものを表示したい。

したがって、彼が認証されていない場合は、DB クエリを含まないページを表示します。それ以外の場合、彼ログインしている場合は、彼のプロジェクトを表示します (これには DB アクセスが含まれます)。

したがって、次のことを考えると、どうすればこれを達成できますか。

  • URLパターンは1つしかありません
  • クラスベースの汎用ビュー (具体的には、ある場合は TemplateView、別の場合は DetailView) を使用したいと考えています。
4

2 に答える 2

1

User.is_authenticated() であるかどうかを確認し、そうである場合はプロジェクトを照会し、そうでない場合はプロジェクトを照会せず、ビューでプロジェクト変数が設定されているかどうかを確認します。

于 2013-06-10T14:02:47.647 に答える
0

通常はLogin Requiredデコレータを使用しますが、URL が 1 つしかないため、request.user.is_authenticated() が True かどうかを確認できます。True の場合、ログインしているユーザーに対応するテンプレートを返します。それ以外の場合は、他のテンプレートを返します。

クラスベースのビュー

これを見てください: TemplateView でログインが必要です

ディスパッチ メソッドを使用して、クラス ベースのビューで認証されているユーザーをチェックしていました。

djangoインポートからhttp django.viewsインポートジェネリックから

class AboutView(generic.TemplateView):
    """ About page view. """
    template_name = 'about.html'

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated():
            raise http.Http404
        return super(AboutView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        ctx = super(AboutView, self).get_context_data(**kwargs)
        ctx['something_else'] = None  # add something to ctx
        return ctx
于 2013-06-10T14:01:55.267 に答える