защита конечной точки json в django как часть вызова ajax - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть концептуальный вопрос.

В настоящее время я использую вызов 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 (т.е. я не хочу, чтобы они имели доступ к данным json, зайдя на myurl.com/chartdata1). Я просто хочу, чтобы это представление / данные были доступны моему шаблону django для заполнения там графиков. Я также не требую от пользователей входа в систему для просмотра главной страницы, поэтому я не хочу создавать @login_required ограничение для представления

Можно ли как-нибудь защитить конечную точку myurl.com/chartdata1, чтобы он расходуется только на графиках?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Хей, в этом случае вместо рендеринга реального контента в JSON вы можете рендерить контент как HTML. И затем, используя 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 текст в контексте, а затем в "графе". html "вы напишите код для графа и передадите его json. так что люди не могут, что JSON будет html контентом в JSON.

Ajax пример

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

это может помочь вам скрыть json

0 голосов
/ 02 апреля 2020

Вы можете передать некоторые дополнительные данные в запросе GET, а затем, по вашему мнению, вы можете проверить эти дополнительные данные. Если в представлении нет дополнительных данных, вы можете вернуть ForbiddenResponse. Очевидно, что любой может просто взглянуть на ваш JavaScript код и найти его , так что это никоим образом не безопасно , но это помешает людям просто настроить таргетинг на URL.

Если ваш данные чувствительны, тогда вам следует подумать о настройке аутентификации токена. Посмотрите на аутентификацию в Django Rest Framework .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...