Возможно ли получить данные полезной нагрузки 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