与django的Json响应列表

时间:2014-09-21 20:31:33

标签: python ajax json django typeahead.js

我想在Django 1.7的表单中使用typeahead.js。此外,我想使用基于类的视图来实现它。

据我所知,我需要创建一个视图,为来自typeahead.js的ajax请求生成JSON响应。

为此使用django-braces是个好主意吗?

到目前为止我所拥有的是:

from braces.views import JSONResponseMixin

[...]

class TagList(JSONResponseMixin, ListView):
    """
    List Tags
    """
    model = Tag
    context_object_name = 'tags'

    def get(self, request, *args, **kwargs):
        objs = self.object_list()

        context_dict = {
            "name": <do something with "obs" to get just the name fields>
            "color": <do something with "obs" to get just the color fields>
        }

        return self.render_json_response(context_dict)

我此刻陷入困境的地方。我在正确的道路上吗?或者甚至可以(并且很容易)没有第三方应用程序?

2 个答案:

答案 0 :(得分:4)

序列化非字典对象¶

为了序列化除dict之外的对象,必须将safe参数设置为False:

response = JsonResponse([1, 2, 3], safe=False)

https://docs.djangoproject.com/en/1.10/ref/request-response/#jsonresponse-objects

编辑:

但请注意,这会在您的代码[1]中引入一个潜在严重的CSRF漏洞,并且不会被Django规范推荐,因此它被称为不安全。如果您要返回的内容需要身份验证,并且您不希望第三方能够捕获它,那么请不惜一切代价避免。

为了缓解此漏洞,您应该将列表包装在字典中,如下所示: {'context': ['some', 'list', 'elements']}

[1] https://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/

答案 1 :(得分:1)

我通常像这样使用python json库:

import json
from django.http import HttpResponse

class TagList(ListView):
    ...
    context_dict = {
            "name": <do something with "obs" to get just the name fields>
            "color": <do something with "obs" to get just the color fields>
    }
    return HttpResponse(json.dumps({'context_dict': context_dict}),
                    content_type='application/json; charset=utf8')

但是在新的Django 1.7中你有JsonResponse objects

希望你觉得它很有用。