這實際上取決於您顯示的信息的用法,如果您不需要實時的數字,那麼您可以選擇每隔X秒進行一次常規AJAX民意測驗,如提到的zwer的評論。
現在,如果您需要實時編號,那麼您應該選擇websockets和django頻道,設置一個您想要的代碼庫非常簡單。
假設你installed django channels and configured your settings。
首先,你需要建立一個管理的WebSockets的consumers.py
和routing.py
邏輯(想想那些爲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連接,訂閱客戶端到一個名爲"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)
它鉤到URL:
from app.views import rfid_processor
urlpatterns = [
url(r'^rfid/$', rfid_processor),
]
這是所有你需要安裝一個最小的工作Django的渠道項目,將回聲從RFID設備接收到顯示屏幕上的號碼。
希望這會有所幫助。
如果你可以稍微延遲一點,可以使用AJAX/jQuery.load()定期(比如說每秒)輪詢後端的更新巨型號碼,然後替換當前顯示的號碼。如果你絕對需要立即改變,你將不得不使用套接字(直接或通過Django頻道),但我認爲這有點矯枉過正。 – zwer
謝謝@zwer我決定現在用Ajax輪詢。回頭看Django Channels –