基于函数的视图的Django Rest Framework

时间:2015-08-30 08:23:57

标签: python json django django-rest-framework

我在django中获取基于函数的视图的JSON时遇到问题。我有以下代码。我基本上希望函数根据用户请求返回json或html页面。

@api_view(['GET'])
@renderer_classes((JSONRenderer,TemplateHTMLRenderer,BrowsableAPIRenderer))
def meld_live_orders(request):
    if request.method =='GET':
        current_orders = Meld_Sales.objects.values_list('TicketNo',flat=True).distinct()
        prev_orders = Meld_Order.objects.values_list('TicketNo',flat =True).distinct()

        live_orders = live_order_generator(current_orders,prev_orders)

        return render(request,'live_orders.html',{'live_orders':live_orders})

当我转到网址时 - http://localhost:8000/live-orders.json

我收到的错误说明了以下内容 - meld_live_orders() got an unexpected keyword argument 'format'

这是因为我需要在CBV中以相同的方式包含序列化器类吗? @API_VIEW序列化响应不是吗?

我尝试在函数参数中包含format = ''。但问题是,当我想要渲染json时,它仍会呈现html。

2 个答案:

答案 0 :(得分:4)

您需要对代码进行一些更改。

首先,如果您尚未定义,则需要在网址中使用format_suffix_patterns。这将允许我们在URL上使用文件扩展名,从而为给定的媒体类型提供端点。

from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
     ...
]

urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html']) # allow us to use '.json' and '.html' at the end of the url

其次。您的视图在定义中没有format参数。

  

使用format_suffix_patterns时,您必须确保添加   相应视图的'format'关键字参数。

@api_view(['GET'])
@renderer_classes((JSONRenderer,TemplateHTMLRenderer,BrowsableAPIRenderer))
def meld_live_orders(request, format=None): # add a 'format' parameter
    ...

第三,你需要返回一个DRF响应而不是Django响应,你将在视图的末尾返回。

答案 1 :(得分:0)

您必须在网址格式中匹配format参数,但在视图函数中没有名为format的参数。将视图定义更改为:

def meld_live_orders(request, format = ""):