Обмен данными из html или javascript с python Django

Я прочитал все сообщения и не могу найти ничего, что подойдет для моей программы. Я использую js-фреймворк mapbox и хочу отправить «позицию» местоположения пользователей в мой код представления Python, чтобы сохранить его в базе данных. Когда я использую console.info () в коде js, он ничего не печатает. Когда я печатаю на питоне, он печатает «Нет». Я пробовал ajax, как и другие сообщения, но, похоже, ничего не работает. Возможно, я неправильно передаю данные из шаблонов в код Python ... Помогите, пожалуйста

base.html

<!DOCTYPE html>
<html lang = "en" dir = "ltr">
 <head>
 <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">        </script>
</head>
</html>

home.html

{% extends "geotracker/base.html" %}
{% load static %}
{% block content %}
 <body>
  <div id='map' width='100%' style='height:400px'></div>
  <form id = "myform" name = "myform">
   {% csrf_token %}
   <input type = "hidden" id = "location" name = "location"/>
 </form>
<script>

 mapboxgl.accessToken = 'mytoken';
 var map = new mapboxgl.Map({
  container: 'map', // container id
  style: 'mapbox://styles/mapbox/streets-v9',
  center: [-96, 37.8], // starting position
  zoom: 3 // starting zoom
 });

 // Add geolocate control to the map.
 var geolocate = new mapboxgl.GeolocateControl();
 map.addControl(geolocate);

  geolocate.on('geolocate', function(e) {
  console.info('locating...');
  var lon = e.coords.longitude;
  var lat = e.coords.latitude
  var position = [lon, lat];
  var element = document.getElementById('location');
  element.innerHTML = position;

    $('#myform').submit(function (ev) {
    //ev.preventDefault();
    console.info('hello');
  });
  });
  </script>
 </body>
{% endblock %}

views.py

def home(request):

context = {
    "mclient": mclient
}
print("POST in view:\t%s" % request.POST.get('location'))

# get users location if authenticated
if request.user.is_authenticated:
    Fan.objects(user=str(request.user)).modify(set__currentPosition= 
 [0,0], image='http://localhost:8000/media/%s' % 
 request.user.profile.image, upsert=True)

return render(request, 'geotracker/home.html', context)

что у тебя console.info()? Вы пытались увидеть, что находится в frm и frm.serilize(), а также в python print, только в request.POST? PS в вашем ajax я считаю должно быть поле url?

Dora 05.01.2019 00:18

console.info - это то же самое, что и печать в js. frm - это форма. request.POST - пустой словарь запросов. Проблема в том, что ajax и отправка формы никогда не запускаются, потому что console.info ('submitting ...') никогда не выполняется.

Steve Freed 05.01.2019 01:33

хорошо, я не читал внимательно. насколько я знаю, для .submit нужен input с типом submit, что означает, что нужна кнопка, иначе он просто останется там, пытаясь прослушать отправку. Поскольку вы делаете это внутри geolocate.on, я бы вынул $('#myform').submit(fu и запустил ajax прямо внутри geolocate.on, сравните эти два, один с кнопкой, а другой нет, но откройте браузер и проверьте. jsfiddle.net/mfv5eLow (с btn) jsfiddle.net/mfv5eLow/1 (без btn) надеюсь, я не ошибаюсь

Dora 05.01.2019 01:47

ваше редактирование оставило .submit (из моего примера) внутри прямого вызова ajax. >. <"то, что я имел в виду, .submit() не должно быть, срыз для моего плохого английского

Dora 05.01.2019 02:11

Я отредактировал свой код с изменениями. Даже когда я закомментирую preventDefault (), он все равно не распечатает «привет». Однако, если я сделаю версию с помощью кнопки, она будет работать, но это может быть связано с тем, что тип ввода ввода обрабатывает событие, а не jquery. Возможно ли, что у меня неправильно установлен jQuery?

Steve Freed 05.01.2019 02:35

может мне не стоит использовать .submit. То, что я имел в виду под .submit, прежде чем иметь в виду $('#myform').submit(function (ev), ваш ajax не должен вызываться внутри этой функции. Тот, у которого есть кнопка, работает, потому что если вы напишете код внутри этой функции, это означает, что он ждет события отправки, которое происходит только тогда, когда вы нажимаете кнопку. Но поскольку вы делаете это без кнопки в своем html, переместите ajax или в этот момент, когда тестируете console.info из $('#myform').submit(function (ev), эта рабочий пример не будет работать, но это то, что я имею в виду jsfiddle.net/49ykg3sn

Dora 07.01.2019 00:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
876
1

Ответы 1

Я не мог понять оператор jquery ajax, но понял, что могу просто использовать простой AXAJ для отправки запроса Post с помощью XMLHttpRequest. Используя этот метод, я смог отправить форму с почтовым запросом, не обновляя страницу, чтобы получить местоположение пользователей из Mapbox Api. Мне просто нужно отправить свой токен авторизации из панели администратора Django, который я могу получить из переменной python, отправленной в мой шаблон.

geolocate.on('geolocate', function(e) {
  console.info('locating...');
  var lon = e.coords.longitude;
  var lat = e.coords.latitude
  var position = lon + " " + lat;
  var element = document.getElementById('location');
  element.value = position;
  var url = 'http://localhost:8000'
  var params = JSON.stringify({
      longitude: lon,
      latitude: lat
  });
// Create a new AJAX request object
var request = new XMLHttpRequest();
// Open a connection to the server
request.open('POST', url, true);
// Actually send the request
var csrftoken = '{{ csrf_token }}'
request.setRequestHeader("Content-type", "application/json");
request.setRequestHeader('X-CSRFToken', csrftoken);
request.send(params);
});

Другие вопросы по теме