1

以下は、モデルがそれを編集しているユーザーに属していることを現在確認する方法です。ほとんどすべての場合にこれを行いますviews.py。少し繰り返しますが、よく使用します。

 # If we have an instance check that it belongs to the login.
        if some_object.user != request.user:
            return HttpResponseForbidden()

それで、他の人がそのような機能にどのように対処しているのか疑問に思っていますか? これをすべてのオブジェクトの保存方法ごとに移動することを考えていましたか?

Django 開発者がこれを行う方法の例 (コード付き) を教えてください。どのユーザーが何を編集できるかを確認するためのより良い方法があるはずですよね?

私は Django に非常に慣れていないので、より経験豊富な開発者からの信頼できる回答に本当に興味があります。

ありがとうございました。

4

1 に答える 1

2

クラスベースのビューを使用している場合は、ミックスインが機能する可能性があります...このようなことを行うことで、独自のビューを作成できます

class RequireOwnershipMixin(object):
    def get_object(self, queryset=None):
        obj = super(RequireOwnershipMixin, self).get_object(queryset)
        if obj.user != self.request.user:
            return None
        return obj

ビューは次のようになります

class UpdateSomeObjectView(RequireOwnershipMixin, UpdateView):
    ...

これは、オブジェクトの所有者でない場合get_objectに返されるメソッドをオーバーライドします。を返すことができるように、 が返されたときに処理するまたはメソッドNoneで追加のチェックを行う必要がある場合があります。getpostNoneHttpResponseForbidden

get_objectメソッドを利用するクラスベースのビューにもこれを使用できます。

于 2013-04-01T13:40:22.207 に答える