因公司專案需求,需要建立乙個展示**,接入兩台攝像機,當攝像機的**流傳過來的時候,實時展示到網頁中,所以需要做乙個實時推送系統的小demo,因接觸django時間不長(兩周左右),也算邊做邊學習了,網上用channels做實時聊天系統的較多,實時推送系統的比較少。
channel_layers =,}
,}
from django.urls import path
from
.import views
urlpatterns =
[ path(
'', views.index)
,]
from django.conf.urls import include
from django.urls import path
urlpatterns =
[ path(
'', include())
,]
以上這一步等於直接在
/mysite/urls.py 修改
from django.urls import path
from
.import views
urlpatterns =
[ path(
'', views.index)
,]
from channels.auth import authmiddlewarestack
from channels.routing import protocoltyperouter, urlrouter
)
這裡簡單的解釋一下:它使您可以根據中type存在的值將其分派到許多其他asgi應用程式 之一scope。協議將定義其作用域包含的固定型別值,因此您可以使用它來區分傳入的連線型別。
簡而言之就是根據你的需求指向不同的url(連線的是你的檢視函式)
from django.urls import path
from
.import consumers
websocket_urlpatterns =
[ path(
'image/'
, consumers.pushconsumer)
,]
import json
from channels.generic.websocket import asyncwebsocketconsumer
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
# 推送consumer
class
pushconsumer
(asyncwebsocketconsumer)
:async
defconnect
(self)
: self.group_name =
'image'
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)await self.accept(
)async
defdisconnect
(self, close_code)
:await self.channel_layer.group_discard(
self.group_name,
self.channel_name
)# print(pushconsumer.chats)
async
defpush_message
(self, event)
:await self.send(text_data=json.dumps())
# 構建函式,便於外部呼叫
defpush
(username, message)
: channel_layer = get_channel_layer(
) async_to_sync(channel_layer.group_send)
( username,
)
6、不要忘了我們的檢視函式view.py
from django.shortcuts import render
from
.consumers import push
# create your views here.
defindex
(request)
:for i in
range(10
):push(
'image'
,i)return render(request,
'index.html'
)
這裡舉了乙個簡單呼叫的例子
for i in range(10):
push(『image』,i)
向image組的所有成員推送0,1、2、3…9
就是那麼簡單
7、在網頁建立我們的websocket連線
建立乙個index.html頁面
<
!doctype html>
"utf-8"
/>
接收端<
/title>
<
/head>
這樣就建立好websocket連線了
如果是採用的本地測試,直接在本地開啟幾個網頁,預設的為127.0.0.1:8000。基本效果就是沒開啟乙個網頁,上乙個網頁就是列印0-9的數字
如果是採用區域網的方法
在settings.py檔案中修改
allowed_hosts =
[你本地電腦的ip位址]
這樣就可以在同一區域網的另一台電腦開啟網頁進行測試,效果和本地測試相同。
以上,菜鳥一枚,歡迎指正,哈哈~
如果有不懂的可以多多檢視官方文件:channels官方文件
相關文件
django python 模型新建一列屬性
django 模型需要新建一列備註屬性 直接在model.py裡面 remark models.charfield max length 128 直接migrations和migrate進行模型遷徙會報錯,先把migrations資料夾下的遷徙檔案除initial全刪除 做好備份 後再進行遷徙。遷徙...
Django Python3 常用命令
1 建立django 專案 執行命令 django admin.py startproject project name 執行命令 注意 要先進入專案目錄下,cd project name 然後執行下面的命令 下同,已經在專案目錄下則不需要 cd project name 3 建立資料庫表 或 更改...
矩陣消元 高斯消元
安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...