Motokulman
@Motokulman

Как в django сделать передачу координат мыши с канвы в бд и обратно?

Здравствуйте!

Бьюсь третий день, пожалуйста, подскажите. Не могу решить проблему передачи координат из канвы в базу django и обратно.

Вот такая рисовалка схем на django. Пока рисуем просто линии, но эти линии надо сохранить в базе. То есть я рисую, она должна сразу сохраняться в базе:
5c9e18f5c2ae7566702589.pngcanvas.js:
var ctx = canvas.getContext('2d');
var raf;
var running = false;
var mouseOldPos;
var mousePos;

var wallLine = {
  draw: function() {
    ctx.beginPath();
    ctx.moveTo(mouseOldPos.x, mouseOldPos.y);
    ctx.lineTo(mousePos.x, mousePos.y);
    ctx.stroke();
  }
};

function clear() {
  ctx.fillStyle = 'rgba(255, 255, 255, 1)';
  ctx.fillRect(0,0,canvas.width,canvas.height);
}

canvas.addEventListener('mousemove', function(e) {
  ctx.lineWidth = 10.0; 
  ctx.lineCap = 'square';
  if (running) {
    clear();
    mousePos = getMousePos(canvas, e);
    wallLine.draw();
  }
});

canvas.addEventListener('click', function(e) {
  if (!running) {
    mouseOldPos = getMousePos(canvas, e);
    running = true;

  } else {
    running = false;
  }

});

function getMousePos(canvas, e) {
  var rect = canvas.getBoundingClientRect();
  return {
      x: e.clientX - rect.left,
      y: e.clientY - rect.top
  };
}


Шаблон plan_detail.html:
{% extends "base_generic.html" %}

{% block content %}
  <h1>Name: {{ plan.name }}</h1>
  <strong>Architect:</strong> {{ plan.architect }}</p>
  <p><strong>Approved:</strong> {{ plan.approved }}</p>
  <p><strong>num_elements:</strong> {{ num_elements }}</p>
  <p><strong>Approve Date:</strong> {{ plan.approve_date }}</p>  
  {% if perms.catalog.can_edit_plan %}
      <a href="{% url }">Edit</a>  
  {% endif %}
  <canvas id="canvas" style="border: 1px solid" width="1000" height="700"></canvas>
  {% load static %}   
  <script type="text/javascript" src="{% static 'js/canvas.js' %}"></script>

  <script>
    var canvas = document.getElementById('canvas');
  </script>

{% endblock %}

Как видите выше, я пытался связать все это через скрипт на странице со скриптом в файле, но не вышло.

Модель в models.py для всех линий всех схем:
class Element(models.Model):
    """Element - it's wall or smth else on the axis. Between axises"""
    #axis_owner = models.ForeignKey(Axis, on_delete=models.SET_NULL, null=True, blank=True, related_name='axis_owner') # need for slanted axises???
    plan_id = models.UUIDField(null=True, blank=True)
    axis_id = models.IntegerField()
    x0 = models.IntegerField()
    y0 = models.IntegerField()
    x1 = models.IntegerField()
    y1 = models.IntegerField()
    # for explicitly specify alignment. By default alignment define automatically:
    
    ALIGN = (
        ('l', 'Left'),
        ('r', 'Right'),
        ('c', 'Center'),
        ('a', 'Auto'),
    )

    align = models.CharField(
        max_length=1,
        choices=ALIGN,
        blank=True,
        default='c',
        help_text='You can explicitly specify alignment option. Default = Auto',
    )

    def save(self, *args, **kwargs):
        super(Element, self).save(*args, **kwargs)

    def __str__(self):
        """String for representing the Model object."""
        return self.axis_id


строчка в urls.py:
path('plan/<uuid:pk>/', views.canvasData, name='plan-detail'),


Функция в views.py:
def canvasData(request, pk):
    """View function for elements rendering on canvas"""
    context = {
        
    }
    return render(request, 'catalog/plan_detail.html', context=context)


Где pk - это pk схемы (plan_id в классе Element ), каждая схема имеет свой набор этих самых линий.

В итоге моя штука должна выглядеть примерно так:
5c9e17b3cc6d5540885093.png
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Motokulman
@Motokulman Автор вопроса
Всем спасибо, решил вопрос просмотром вот этого видео https://youtu.be/9QNw5v6BUBE, хотя не люблю видеоуроки. Пока работает на локалке, как на боевом будет, не знаю.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы