Django RESTフレームワーク:オブジェクトへのユーザーアクセスを制限する

user3210657

書籍用のRESTAPIを構築しようとしています。

/api/book
/api/book/{book_id}

ユーザーは自分の本にのみアクセスできる必要があります。私が今これを行っている方法は、ユーザー名、つまりBook.objects.all()。filter(owner = request.user)を使用して結果をフィルタリングすることです。

views.py

class Book_List(APIView):

    permission_classes=(permissions.IsAuthenticated)

    def get(self, request, format=None):
        **books= Book.objects.all().filter(owner=request.user)**
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors,   status=status.HTTP_400_BAD_REQUEST)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)    

#/book/{pk}
class Book_Detail(APIView):

    permission_classes = (permissions.IsAuthenticated)

    def get_object(self, pk, request):
        try:
            return Book.objects.get(pk=pk, owner=request.user)
        except Playlist.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        book = self.get_object(pk, request)
        serializer = BookSerializer(playlist, context={'request': request})
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        book= self.get_object(pk)
        serializer = BookSerializer(playlist, data=request.data, context={'request': request})
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        book= self.get_object(pk)
        book.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

serializers.py

class BookSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Book
        fields = ('url', 'owner','title', 'created_date', 'shared_with', 'tracks')       

class UserSerializer(serializers.HyperlinkedModelSerializer):
    books = serializers.HyperlinkedRelatedField(many=True,view_name='playlist-detail', read_only=True)
    owner = serializers.ReadOnlyField(source='owner.username')

    class Meta:
        model = User
        fields = ('url', 'username', 'owner', 'books') 

しかし、これは正しい方法ですか?

Django Rest Frameworkは、このための組み込みソリューションを提供しますか?

解決策はパーミッションにありますか?はいの場合、ユーザーが作成したすべてのオブジェクトにどのように設定しますか(特定のオブジェクトを取得するために、のような権限チェックを行うことができることを理解していますobj.user==request.user)。私は正しいですか?

アレックスモロゾフ

ModelViewset典型的なCRUDのすべてのロジックを含むを使用できます

class BooksViewSet(ModelViewset):
    serializer_class = BookSerializer
    permission_classes=[permissions.IsAuthenticated, ]

    def get_queryset(self):
        return Books.objects.filter(owner=self.request.user)

    def perform_create(self, serializer):
        serializer.data.owner = self.request.user
        super(BooksViewSet, self).perform_create(serializer)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Django RESTフレームワークPOSTネストオブジェクト

Django RESTフレームワーク-ネストされたシリアライザーのクエリ制限?

Django RESTフレームワークシリアライザー:逆の関係の最新のオブジェクトを表示します

django restフレームワークエラーユニットテスト:TypeError:タイプ 'type'のオブジェクトにlen()がありません

Django RESTフレームワークのGETネストされたシリアライザーはエラーを生成します: 'RelatedManager'オブジェクトには属性がありません 'datafile_set' "

Django Restフレームワークは、ページネーションの制限とオフセットを検証します

Django RESTフレームワーク:AttributeError: 'ユーザー'オブジェクトに属性 'ブック'がありません

Django Restフレームワーク:1つのPOSTリクエストに複数のオブジェクトを挿入します

Django-Rest-モデルオブジェクトと画像を返すフレームワークAPIView

Djangoはユーザーオブジェクトへのアクセスを制限します

Djangoのオブジェクトへのアクセスを制限する

djangoのRESTフレームワークにオブジェクトの配列を投稿する方法は?

Django RESTフレームワーク:さまざまなserizalizedオブジェクトのリスト?

セッションユーザーがそのユーザーへの外部キーを持つオブジェクトのみを一覧表示できるように、django-rest-frameworkでアクセス許可を設定するにはどうすればよいですか?

Django RESTFramework特定のシリアライザーフィールドへのユーザーアクセスを制限する方法

特定のオブジェクトの表示へのアクセスを制限するDjango

Django - ユーザーによる同じ値へのアクセス制限

Django ユーザー名を使用して別のオブジェクトにアクセスする方法は?

Django フィルターを使用してユーザー プロファイルに基づいてデータへのアクセスを制限する

Django:ContentTypeオブジェクトへのアクセス、content_objectからユーザーを取得

Djangoで他のユーザーが作成したオブジェクトを表示/変更するためにユーザーアクセスを制限する方法

ユーザーが所有するオブジェクトへのクエリを制限するDjangoグラフェンリレー

Django RESTフレームワーク-ユーザービューのデータアクセスを防止しますか?

Djangoレストフレームワーク「Varはユーザーインスタンスである必要があります」と「タイプ「タイプ」のオブジェクトはJSONシリアル化可能ではありません」

Django RESTフレームワークのカスタムSerializerフィールド内のリクエストオブジェクトにアクセスするにはどうすればよいですか?

djangoレストフレームワーク:SlugRelatedFieldオプション-ユーザーによる制限

django restフレームワークでオブジェクトを作成するときに、ネストされたシリアライザーのシリアライザーにユーザーデータを渡します

Djangoの特定のユーザーにモデルオブジェクトへのアクセスを許可する方法

djangoレストフレームワークでAuthユーザーのパスワードを更新する方法

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ