真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Django+WebSocket+Redis在線聊天室題文章-創(chuàng)新互聯(lián)

話不多說先上效果圖演示
Django + WebSocket + Redis 在線聊天室題文章

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,競秀企業(yè)網(wǎng)站建設,競秀品牌網(wǎng)站建設,網(wǎng)站定制,競秀網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,競秀網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

項目:http://112.74.164.107:9990/

1、安裝組建

redis: yum install redis/apt install redis

2、創(chuàng)建虛擬化環(huán)境并進入

python3/python -m venv venv

source venv\bin\active

3、安裝第三方庫
pip install -r requirements.txt

4、初始化
python manage.py makemigrations

python manage.py migrate
python manage.py collectstatic

5、啟動服務
gunicorn -w 5 -k gevent -b 0.0.0.0:9990 webchat.wsgi

6、訪問

瀏覽器訪問http://ip:9990

整個項目中涉及的思路和知識點我們在這里都一一分解為大家詳細解說如下:

Django 基礎(chǔ)

Django :一個可以使 Web 開發(fā)工作愉快并且高效的 Web 開發(fā)框架,能夠以最小的代價構(gòu)建和維護高質(zhì)量的 Web 應用

框架:軟件開發(fā)工程師從日常的重復勞動中總結(jié)出快速的、模塊化的、安全的軟件開發(fā)模式

Django 是 Python 開發(fā)者的最佳 Web 框架

MVC

Django + WebSocket + Redis 在線聊天室題文章

ORM

Object Relation Mapping (關(guān)系對象映射)

  • 用來把對象模型表示的對象映射到基于 SQL 的關(guān)系模型數(shù)據(jù)庫結(jié)構(gòu)中去
  • 在具體的操作實 體對象的時候,就不 需要再去和復雜的 SQL 語句打交道,只 需簡單的操作實體對 象的屬性和方法
    Django + WebSocket + Redis 在線聊天室題文章

Mail (通過郵箱和驗證碼方式進行用戶登錄驗證)

開發(fā)者可為使用 Django 提供的 send_mail 函數(shù)發(fā)送郵件

使用方法

配置郵箱(setting.py)

  • EMAIL_HOST = 'smtp-mail.outlook.com'
  • EMAIL_PORT = 587
  • EMAIL_HOST_USER = 'imsilence@outlook.com'
  • EMAIL_HOST_PASSWORD = ‘xxxxxx'
  • EMAIL_USE_TLS = True
  • EMAIL_FROM = EMAIL_HOST_USER

發(fā)送

send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

注: django 發(fā)送郵件封裝 python smtplib 模塊,smtplib 使用方 法: https://github.com/imsilence/packages/blob/master/python/mailclient.py

Session & Cookie

實現(xiàn)用戶認證機制

  • HTTP 協(xié)議為無狀態(tài)
  • Session 存儲在服務器
  • Cookie 存儲在客戶端
    Django + WebSocket + Redis 在線聊天室題文章
    Django + WebSocket + Redis 在線聊天室題文章
    Django + WebSocket + Redis 在線聊天室題文章

WebSocket 基礎(chǔ)(實現(xiàn)服務端消息主動推送客戶端)

是什么?

WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議

為什么需要?

HTTP 協(xié)議是一種無狀態(tài)的、無連接的、單向的應用層協(xié)議。它采用了請

求/響應模型。通信請求只能由客戶端發(fā)起,服務端對請求做出應答處理

弊端: HTTP 協(xié)議無法實現(xiàn)服務器主動向客戶端發(fā)起消息。

傳統(tǒng)模式下, Web 應用程序通過頻繁的 ajax 請求實現(xiàn)長輪詢( 輪詢是在 特定的時間間隔(如每1秒),由瀏覽器對服務器發(fā)出 HTTP 請求,然后由 服務器返回最新的數(shù)據(jù)給客戶端的瀏覽器)

缺點:輪詢的效率低,非常浪費帶寬等資源(瀏覽器需要不斷的向服務器

發(fā)出請求)

如何工作?

Web 瀏覽器和服務器都必須實現(xiàn) WebSockets 協(xié)議來建立和維護連 接,由于 WebSockets 連接長期存在,與典型的 HTTP 連接不同,對 服務器有重要的影響(任何 WebSockets 服務器都需要實現(xiàn)為異步服 務器,基于多線程或多進程的服務器無法適用于 WebSockets,因為 它旨在打開連接,盡可能快地處理請求,然后關(guān)閉連接)

在 WebSocket 協(xié)議中, 瀏覽器和服務器只需要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

如何使用?

客戶端 API (javascript)

1、創(chuàng)建 websocket 對象
var ws = new WebSocket(url, [protocol] );

2、屬性

ws.readyState 表示連接狀態(tài)

可選值:

0: 表示連接尚未建立。
1: 表示連接已建立,可以進行通信。
2: 表示連接正在進行關(guān)閉。
3: 表示連接已經(jīng)關(guān)閉或者連接不能打開。
ws.bufferedAmount 表示已被 send() 方法放入正在隊列中等待傳輸,但是還沒有發(fā) 出的 UTF-8 文本字節(jié)數(shù)

3、事件

  • open ws.onopen 建立連接時觸發(fā)
  • message ws.onmessage 客戶端接收服務端數(shù)據(jù)時觸發(fā)
  • error ws.onerror 通信發(fā)生錯誤時觸發(fā)
  • close ws.onclose 連接關(guān)閉時觸發(fā)

4、方法
send ws.send() 使用連接發(fā)送數(shù)據(jù)

close ws.close() 關(guān)閉連接

dwebsocket 使用

dwebsocket 模塊為 django 提供了 WebSocket 協(xié)議的實現(xiàn)

使用

1、安裝
pip install dwebsocket

2、用法

使用 accept_websocket 或 require_websocket 裝飾器修飾 view

  • accept_websocket: view 既可處理 websocket 協(xié)議又可處理普通 http協(xié)議
  • require_websocket: view 只處理 websocket 協(xié)議,拒絕處理普通 http協(xié)議
    request.is_websocket 方法用于判斷是否為 websocket 協(xié)議

獲取 websocket 連接對象

  • request.websocket 對象

獲取數(shù)據(jù)

  • request.websocket.wait 方法, 阻塞性獲取客戶端數(shù)據(jù)
  • request.websocket.read 方法,非阻塞性獲取客戶端數(shù)據(jù)

發(fā)送數(shù)據(jù)

  • request.websocket.send(message): 發(fā)送消息給 websocket 客戶端

其他

  • request.websocket.count_messages()
  • request.websocket.has_messages()
  • request.websocket.iter()

redis 基礎(chǔ)

Redis 是一個開源的,基于內(nèi)存的,可持久化的,K-V 數(shù)據(jù)庫

用途:

  • 緩存
  • 消息隊列
  • 發(fā)布訂閱

發(fā)布訂閱:是一種消息通信模式,發(fā)送者(pub)發(fā)送消息,縮 影訂閱者(sub)都可以接收消息并處理
Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

1、在 redis 客戶端中使用

  • 訂閱:subscribe channel
  • 發(fā)布:publish channel message

2、在 python 中使用

redis 模塊

  • pip install redis
  • cli = redis.StrictRedis()

訂閱

  • pubsub = cli.pubsub()
  • pubsub.subscribe(channel)
  • pubsub.get_message()

發(fā)布:

  • cli.publish(channel, message)
    Django + WebSocket + Redis 在線聊天室題文章

代碼解讀——項目啟動

代碼結(jié)構(gòu)
Django + WebSocket + Redis 在線聊天室題文章

app 定義(app.py)
Django + WebSocket + Redis 在線聊天室題文章

配置(settings.py)

  • 配置訪問地址
    Django + WebSocket + Redis 在線聊天室題文章

  • 啟用 app
    Django + WebSocket + Redis 在線聊天室題文章

  • 配置模版路徑
    Django + WebSocket + Redis 在線聊天室題文章

  • 配置時區(qū)和國際化
    Django + WebSocket + Redis 在線聊天室題文章

  • 配置靜態(tài)資源路徑
    Django + WebSocket + Redis 在線聊天室題文章

  • 配置郵箱
    Django + WebSocket + Redis 在線聊天室題文章

  • 配置 redis 緩存
    Django + WebSocket + Redis 在線聊天室題文章

代碼解讀——用戶認證流程

流程

1、打開登錄頁面

  • 瀏覽器中輸入 http://ip:9990/login/, 瀏覽器發(fā)送 GET 請求到 login/
  • urls.py 處理 url login/ 到視圖 login
  • login 視圖 打開 login.html 模板

2、發(fā)送驗證碼

  • 填寫郵箱,點擊發(fā)送驗證碼按鈕,瀏覽器發(fā)送 ajax(GET) 請求到 login_code/
  • urls.py 處理 url login_code/ 到視圖 login_code
  • login 視圖調(diào)用 models 創(chuàng)建并記錄驗證碼,同時發(fā)送郵件給用戶,返回 json 數(shù) 據(jù)

3、登錄

  • 填寫驗證碼,點擊登陸按鈕,瀏覽器發(fā)送 ajax(POST) 請求到 login/
  • urls.py 處理 url login/ 到視圖 login
  • login 視圖調(diào)用 models 驗證郵箱和驗證碼,返回 json 數(shù)據(jù),當驗證成功同時記錄 session 數(shù)據(jù)

路由(url.py)

Django + WebSocket + Redis 在線聊天室題文章

視圖-view.py

Django + WebSocket + Redis 在線聊天室題文章

視圖-models.py

Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

視圖-templates/login.html

Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

代碼解讀——websocket 處理流程

流程

創(chuàng)建 websocket 連接到 msg/,同時注冊 open, error, message 事件

當連接創(chuàng)建,調(diào)用 websocket.send 發(fā)送上線消息

用戶填寫消息,點擊按鈕,調(diào)用 websocket.send 方法發(fā)送聊天消息

urls.py 處理 url msg/ 到視圖 msg

msg 視圖接收和處理 websocket 消息,同時監(jiān)聽和處理 redis 訂閱的 消息

  • 當接收到 websocket 消息,發(fā)布消息到 redis 通道
  • 當接收到 redis 發(fā)布消息,則發(fā)送到 websocket 客戶端

獲取 websocket 連接和發(fā)送消息(index.html)

Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

路由處理(view.py)
Django + WebSocket + Redis 在線聊天室題文章

消息顯示處理(index.html)
Django + WebSocket + Redis 在線聊天室題文章

代碼解讀——推出登陸流程

Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章
Django + WebSocket + Redis 在線聊天室題文章

想要源碼的請留言或者私信博主

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網(wǎng)頁題目:Django+WebSocket+Redis在線聊天室題文章-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/cepjsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部