【问题标题】:How to use django REST view from regular view如何从常规视图中使用 django REST 视图
【发布时间】:2014-07-03 06:09:25
【问题描述】:

我有这个 api 视图

class ItemList(generics.ListCreateAPIView):
    model = Item

    def get_queryset(self):
      return get_objects_for_user('item_view',self.request.user)

和另一个应用视图(不是 API 的一部分)

def item_search(request):
    qs = get_objects_for_user('item_view',request.user)

    q = request.GET.get('q',None)
    qs.filter ( ... )
    paginator = Paginator(qs['queryset'], 20)
    ..

在常规视图的 API 视图中使用 get_queryset 的最佳方式是什么?

我有一些权限\过滤正在进行,我希望尽可能保持视图干燥。

我浏览了代码,发现通用视图是用ItemList.initizlie(request) 实例化的,但我一直在那儿磕磕绊绊,这让我认为这可能不是解决方案......

编辑:

到目前为止,我最接近的是ItemList.as_view()(request) - 它返回数据但仍然不够,我需要 QS,以便我可以对其应用额外的过滤。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    Django-Rest-Framework 视图基于 Django 基于类的视图。除此之外,选择的方法名称与 Django 通用视图中的相同。

    我想说最好的方法是构建一个在 API 视图和“普通”视图中都使用的 mixin。这个mixin可以提供get_queryset(和其他)。如果您保持名称标准,则两个 real 视图都将非常小,并且大多数逻辑都将在您的 mixin 中。

    【讨论】:

    • 我不确定我是否理解您的回答。我不是在寻找一种将 API get_queryset 混合到常规视图中的方法 - 我正在寻找一种在给定对常规视图的请求的情况下从 API 消耗资源的方法(API 工作是提取/序列化/屏幕数据,常规的视图工作是呈现 html 响应 - 它们用于不同的目的并且应该保持独立)。
    • 您的问题是“在常规视图中使用 API 视图中的 get_queryset 的最佳方式是什么?” ;) 我理解你的想法(在你的 Django 视图中使用 DRF 视图),但我仍然认为这里最干净的方法是将共享行为放入一个单独的类中,由 Rest-Framework 视图和 Django 视图使用.
    猜你喜欢
    • 2019-07-12
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多