使用 angular $http 和 django urlpatterns 来获取 json 文件

Posted

技术标签:

【中文标题】使用 angular $http 和 django urlpatterns 来获取 json 文件【英文标题】:use angular $http with django urlpatterns to get a json file 【发布时间】:2015-05-28 06:56:10 【问题描述】:

我想要做的是向 django url 模式发送一个 $http GET 请求并返回一个 .json 文件。我可以使用 urlpatterns 来返回文件而不是视图吗?

这甚至可能吗?

当前表单/数据返回 500

testModule.js

angular.module('mod1', ['mod2'])

.controller('resorcesCtrl', ['mod2Factory',
     function(mod2Factory) 
        mod2Factory.getJSON();
     
]);


angular.module('mod2', [])
   .factory('mod2Factory', [ '$http',
      function($http) 

        var getJSON = function() 
           return $http(
           url: "/form/data",
           method: "GET"
        )
      

      return 
         getJSON:getJSON
      ; 
    
  ])

urls.py

url(r'^form/data', 'myApp.views.getJSON', name='getJSON'),

views.py

def getJSON(request):
    context = 
        "json": json
    
    return render(request, '', context)

【问题讨论】:

您的 500 错误的内容是什么?你能把它和堆栈跟踪一起放在这里吗?哪个版本的 Django? 【参考方案1】:

从 Django 1.7 开始,有一个名为 JsonResponse 的新响应对象。

你的观点可以很简单:

from django.http import JsonResponse

def getJSON(request):
    # context is a Python dict.
    context = 
        "key": "value",
        "other_key": 365,
    
    return JsonResponse(context)

context 必须是有效的 JSON 可序列化对象。有关JsonResponse 的更多详细信息,请参阅the docs。如果您在序列化方面遇到任何问题,可以将自己的编码器传递给JsonResponse 来处理自定义数据类型,read more。

【讨论】:

【参考方案2】:

我更喜欢使用这样的功能

import json
from django.http import HttpResponse

def json_responder(**kwargs):
    return HttpResponse(json.dumps(kwargs), content_type="application/json")

def yourview(request):
    return json_responder(type='error', msg='a message")

并且可以在每个 django 版本上使用

【讨论】:

以上是关于使用 angular $http 和 django urlpatterns 来获取 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

Django + Angular:如何将 angularjs $http 数据或参数发送到 django 并在 django 中解释?

Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?

在 Django CSRF 保护中使用 angular2 http 请求的正确方法是啥?

Angular 4 对 Django Rest 框架的 HTTP 请求

Apache 服务于 Django 和 Angular

Django和Angular.js模板标签冲突的解决方式