作为ajax调用的一部分保护Django中的json端点

2024-09-27 17:59:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个概念性的问题

我目前正在使用ajax调用将数据从数据库发送到django模板,以填充页面上的图表

url.py

urlpatterns = [
    path('chartdata1/', tracker.get_chart_data_json1, name="global_trend_chart"), 
]

views.py

def get_chart_data_json1(request):
    data = {}
    cd = ChartData.get_global_trend()
    data['chart_data'] = cd
    return HttpResponse(json.dumps(data, default=str), content_type='application/json')

HTML/JAVASCRIPT

var chartDataUrl = "{% url 'global_trend_chart' %}"   
$.getJSON(chartDataUrl,
        function(data) {
            chartOptions.xAxis.categories = data['chart_data']['date'];
            chartOptions.series[0].data = data['chart_data']['confirmedcases'];
            var chart = new Highcharts.Chart(chartOptions);
    })

虽然这很好,但我不希望人们能够直接访问url(即,我不希望他们能够访问myurl.com/chartdata1来访问json数据)。我只希望django模板可以访问此视图/数据,以填充那里的图表。我也不要求用户登录才能看到主页,所以我不想对视图创建@login\u所需的限制

我是否有办法保护myurl.com/chartdata1端点,使其仅可供图表使用

谢谢


Tags: 数据djangopy模板jsonurldataget
1条回答
网友
1楼 · 发布于 2024-09-27 17:59:05

干草, 在这种情况下,您可以将内容呈现为HTML,而不是以JSON呈现实际内容。然后使用Ajax,您可以在模板中显示这一点。如果您理解我在示例中所展示的方式,它将非常酷

查看示例

def load_graph_html(request):
    data = dict()
    context = {
      #some context data
     }

    data['graph_html'] = render_to_string('graph.html', context, request=request)

    return JsonResponse(data)

您将在上下文中传递json dict,然后在“graph.html”中为graph编写代码,然后将其传递给json。所以,人们不能认为JSON是JSON中的html内容

Ajax示例

$.ajax({
      "url": url,
      "dataType": "json",
      "type": "GET",
      "success": function (data) {
        $("#rigadmin_order_form_loaded_area").html(data.graph_html)
      }
});

它可能会帮助您隐藏json

相关问题 更多 >

    热门问题