4

結合テーブルを使用して、モデルにProjectManyToMany 関係を持つモデルがあります。Userユーザーがプロジェクトのメンバーではない (結合テーブルにない) 場合、ユーザーが特定のプロジェクトを表示するビューにアクセスできないようにしたいと考えています。

ビュー メソッド内の単純な if ステートメントまたはテンプレート内のカスタム フィルターで解決できることはわかっていますが、カスタム デコレーターを使用してこれを実行できるようにしたいと考えています。これは可能ですか?もしそうなら、どのようにそれを行うことができますか?

何かのようなもの:

def may_user_view_this(function):
    def wrapper(request, *args, **kwargs):
        user = request.user
        project = Project.objects.get(id=???????) #id
        if not project.has_user(user):
            return HttpResponse('You cannot view this.')
        else:
            return function(request, *args, **kwargs)
    return wrapper


@may_user_view_this() # if not go the specific url
def my_view(request, page_id=None):
    # do stuff and render

デコレータ関数からpage_id送信されたパラメータにアクセスするにはどうすればよいですか?my_view

4

0 に答える 0