Это действительно зависит от использования отображаемой информации, если вам не нужно, чтобы это число было в режиме реального времени, тогда вы можете выбрать обычный опрос AJAX один раз каждые X секунд, как указано в Комментарий zwer.
Теперь, если вам нужно, чтобы этот номер находился в режиме реального времени, вам следует искать веб-порты и каналы django, очень просто настроить базу кода, которая делает то, что вы хотите.
Предполагая, что вы installed django channels and configured your settings.
Прежде всего, необходимо настроить логику consumers.py
и routing.py
, которая управляет WebSockets (думать о тех, как views.py
и urls.py
но WebSocket логики).
consumers.py
from channels import Group
from channels.auth import channel_session_user_from_http, channel_session_user
@channel_session_user_from_http
def ws_add(message):
# Authenticates the client
# ASGI WebSocket packet-received and send-packet message types
# both have a "text" key for their textual data.
message.reply_channel.send({
"accept": True,
})
Group("rfid-group").add(message.reply_channel)
@channel_session_user
def ws_message(message):
# You can process messages you receive from the socket here
# Apply w/e logic validation
@channel_session_user
def ws_disconnect(message):
Group("rfid-group").discard(message.reply_channel)
routing.py
from channels.routing import route
from .consumers import ws_message, ws_add, ws_disconnect
routing_routing = [
route("websocket.connect", ws_add),
route("websocket.receive", ws_message),
route("websocket.disconnect", ws_disconnect),
]
Теперь вам нужно написать фронтального WebSocket логика:
<script>
socket = new WebSocket("ws://" + window.location.host);
socket.onmessage = function(e) {
console.log("Message received");
// Process the received number here
console.log(e.data);
}
</script>
Это установит сеть ocket connection, подписывает клиента на группу под названием "rfid-group"
, теперь любое сообщение, отправленное этой группе, будет передано всем подписчикам этой группы, это может обрабатывать несколько клиентов.
Теперь нам нужна деталь, которая будет прослушивать запрос с устройства rfid, обрабатывать его и отправлять результат на дисплей, это должно быть просто view
, поскольку устройство RFID будет отправлять обычную HTTP-информацию.
from django.http import HttpResponse
from channels import Group
def rfid_processor(request):
'''
Consider authenticating your rfid_num producer to prevent
someone messing with your api
'''
rfid_num = request.GET.get("rfid", "")
if rfid_num:
Group("rfid-group").send({"text": rfid_num})
return HttpResponse(status=200)
return HttpResponse(status=500)
Hook его URL-адрес:
from app.views import rfid_processor
urlpatterns = [
url(r'^rfid/$', rfid_processor),
]
Это все, что вам нужно установить минимальную рабочую Джанго каналов проект, который будет эхо количество полученного от RFID-устройства на экране дисплея (s) ,
Надеюсь, это поможет.
Если вы в порядке с небольшой задержкой, вы можете периодически использовать AJAX/jQuery.load(), чтобы периодически (скажите каждую секунду) опросить ваш сервер для обновленного гигантского номера, а затем просто заменить номер, который вы сейчас показываете , Если вам абсолютно необходимо немедленное изменение, вам придется использовать сокеты (напрямую или через Django Channels), но я думаю, что это немного перебор. – zwer
спасибо @zwer Я решил пойти с опросом Ajax на данный момент. Оглянитесь на каналы Django –