Возможно ли получить данные полезной нагрузки JavaScript socket io и распечатать их с помощью Django?

У меня есть проект JavaScript, который использует socket io и консоль для передачи данных.

const   = generateMockData(deviceId);
        console.log(payload)
        io.of("/").emit("data", JSON.stringify(payload));

А это сгенерированные имитационные данные

function generateMockData(deviceId) {
  const contaminants = [
    {
      id: 9,
      ave: chance.floating({ min: 5, max: 5.5, fixed: 7 }),
      ave_reduction: chance.floating({ min: 0, max: 1, fixed: 1 }),
    },
    {
      id: 10,
      ave: chance.floating({ min: 5, max: 5.5, fixed: 7 }),

      ave_reduction: chance.floating({ min: 0, max: 1, fixed: 1 }),
    },
    {
      id: 14,
      ave: chance.floating({ min: 5, max: 5.5, fixed: 7 }),
      ave_reduction: chance.floating({ min: 0, max: 1, fixed: 1 }),
    },
    {
      id: 15,
      ave: chance.floating({ min: 5, max: 5.5, fixed: 7 }),
      ave_reduction: chance.floating({ min: 0, max: 1, fixed: 1 }),
    },
  ];

сокет io, прослушивающий данный порт

const port = process.env.PORT || 3000;
server.listen(port, () => {
  console.log(`listening on http://localhost:${port}`);
});

в моей консоли это выглядит следующим образом

 contaminants: [
    { id: 9, ave: 5.4897571, ave_reduction: 0.5 },
    { id: 10, ave: 5.4942647, ave_reduction: 0.7 },
    { id: 14, ave: 5.316183, ave_reduction: 0.5 },
    { id: 15, ave: 5.0806739, ave_reduction: 0.9 }
  ],

можно ли передать эти данные полезной нагрузки (данные консоли) в Django? Я пытался использовать httpresponse в Django, но он не получает нужных мне данных. javascript и django находятся в разных проектах.

from django.http import HttpResponse  
response = HttpResponse("http://localhost:3000/")
        print(response)

print response

<HttpResponse status_code=200, "text/html; charset=utf-8">

Вы можете сделать это с помощью AJAX: если у вас нет ajax, то вот он: https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js

const port = process.env.PORT || 3000;
server.listen(port, () => {
  //POST payload to django
    $.ajax({
        type: "POST",
        url: "http://your-django-url/url-name", // index
        
        headers: {
            'X-CSRFToken': '{{csrf_token}}'
        },
        data: {'port ': port },
        dataType: "json",
        success: function(response) {
            if(response.success == true){
            console.log(response.port)
            }
            else if(response.success ==false){
                console.log('success:false')
            }
        },
        error: function(rs, e) {
            console.log('error')
        }
    });
});
                        

views.py:

def index(request):
    if request.method == 'POST':
        port = request.POST.get("port")
        return render(request, 'base.html', context={"text": "data", "port":port})
    return render(request, 'base.html', context={"text": "data", "port":port})

urls.py

urlpatterns = [
    path('', index, name="index")
]

Чтобы избежать ошибки перекрестного происхождения:

pip install django-cors-headers

настройки

INSTALLED_APPS = [
    ...    
    'corsheaders',
    ...
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    ...
]
ALLOWED_HOSTS=['*']
CORS_ORIGIN_ALLOW_ALL = True
Вернуться на верх