Общение из HTML или JavaScript для Python Django - PullRequest
0 голосов
/ 05 января 2019

Я прочитал все сообщения и не могу найти ничего, что будет работать для моей программы. Я использую инфраструктуру mapbox js и хочу отправить местоположение пользователя 'position' в мой код представления Python, чтобы сохранить его в базе данных. Когда я делаю console.log () в коде js, он ничего не печатает. Когда я делаю печать в Python, она печатает «Нет». Я пробовал 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.log('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.log('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)

1 Ответ

0 голосов
/ 07 января 2019

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

geolocate.on('geolocate', function(e) {
  console.log('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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...