django python搭建訊息推送系統

2021-10-06 01:39:09 字數 3120 閱讀 1612

因公司專案需求,需要建立乙個展示**,接入兩台攝像機,當攝像機的**流傳過來的時候,實時展示到網頁中,所以需要做乙個實時推送系統的小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...