作为ajax调用的一部分,在django中保护json端点

问题描述 投票:0回答:2

我有一个概念性问题。

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

urls.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_required限制

我有什么办法可以保护myurl.com/chartdata1终结点,使其只能由图表使用?

谢谢

python django
2个回答
0
投票
所以这绝对不安全,但这将阻止人们仅以目标url为目标。

如果您的数据敏感,则应考虑设置令牌身份验证。在Django Rest Framework中查看身份验证。


0
投票
查看示例。

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字典,然后在“ graph.html”中编写图形代码,然后将其传递给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

© www.soinside.com 2019 - 2024. All rights reserved.