Django通过dwebsocket实现websocket的例子

与django推荐的channel不同,dwebsocket使用更加方便简单

使用方法1:

只需views.py文件中,将对应的视图函数添加装饰器

accept_websocket-—可以接受websocket请求和普通http请求
require_websocket----只接受websocket请求,拒绝普通http请求
from dwebsocket.decorators import accept_websocket,require_websocket

@accept_websocket
def test_websocket(request):
  if request.is_websocket():
    while 1:
      time.sleep(1) ## 向前端发送时间
      dit = {
        'time':time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time()))
      }
      request.websocket.send(json.dumps(dit))

使用方法2:

使用中间件

步骤:

1. settings.py文件中,添加如下信息

import dwebsocket
# 为所有的URL提供websocket,如果只是单独的视图需要可以不选
MIDDLEWARE_CLASSES=['dwebsocket.middleware.WebSocketMiddleware']

WEBSOCKET_ACCEPT_ALL=True # 可以允许每一个单独的视图实用websockets

官方说明:做了如上配置,仍然会拒绝普通视图的websockets。所以必须在视图上设置' accept_websocket ' '属性来允许websockets,所以继续做如下配置。

2. views.py文件中,相关视图添加装饰器

from dwebsocket.decorators import accept_websocket,require_websocket

@accept_websocket
def test_websocket(request):
  if request.is_websocket():
    while 1:
      time.sleep(1) ## 向前端发送时间
      dit = {
        'time':time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time()))
      }
      request.websocket.send(json.dumps(dit))

看起来跟方法一没什么区别,还多了一步settings配置,但是区别在哪呢???

官方是这么说的:These attributes are always available if you use the middleware

翻译过来就是,如果使用中间件,有以下这下方法可用:

request.is_websocket() #websocket请求返回True,普通请求返回False
request.websocket # websocket建立连接后,request将有websocket提供的相关api属性,如果没有建立连接则是None
WebSocket.wait() # 阻塞接收消息
WebSocket.read() # 非阻塞接收消息
WebSocket.count_messages() #返回队列中的消息数量
WebSocket.has_messages() # 有消息返回True,反之False
WebSocket.send(message) # 发送消息
WebSocket.__iter__() # 当迭代器使用

官方链接

以上这篇Django通过dwebsocket实现websocket的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Django-channels 实现WebSocket实例

    引入 先安装三个模块 pip install channels pip install channels_redis pip install pywin32 创建一个Django项目和一个app 项目名随意,app名随意.这里项目名为 django_websocket_demo ,app名 chat 把app文件夹下除了 views.py 和 __init__.py 的文件都删了,最终项目目录结构如下: django_websocket_demo/ manage.py django_websoc

  • python实现WebSocket服务端过程解析

    一种类似Flask开发的WebSocket-Server服务端框架,适用python3.X 1.安装模块Pywss pip install pywss 2.搭建简易服务器 2.1 服务端代码 代码简介 route: 注册请求路径 example_1(request, data): request: socket句柄,能够发送和接收数据接.发送数据request.ws.send(data),收数据request.ws_recv(1024) data: 客户端发送的数据存于此处 from pywss

  • 详解基于django实现的webssh简单例子

    本文介绍了详解基于django实现的webssh简单例子,分享给大家,具体如下: 说明 新建一个 django 程序,本文为 chain. 以下仅为简单例子,实际应用 可根据自己平台情况 进行修改. 打开首页后,需要输入1,后台去登录主机,然后返回登录结果. 正常项目 可以post 主机和登录账户,进行权限判断,然后去后台读取账户密码,进行登录. djang后台 需要安装以下模块 安装后会有一个版本号报错,不影响 channels==2.0.2 channels-redis==2.1.0 amq

  • Python如何爬取实时变化的WebSocket数据的方法

    一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变化的数据.如下图: Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSocket 这两种.轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 '实时' 的效果,虽然看起来数据像是实时更新的,但实际上它有一定的时间间隔,并不是真正的实时更新.轮询通常采用 拉 模式,由客户端主动从服务端拉取数据. WebSocket 采用的是 推 模式,由服务端主动将数

  • Django通过dwebsocket实现websocket的例子

    与django推荐的channel不同,dwebsocket使用更加方便简单 使用方法1: 只需views.py文件中,将对应的视图函数添加装饰器 accept_websocket--可以接受websocket请求和普通http请求 require_websocket----只接受websocket请求,拒绝普通http请求 from dwebsocket.decorators import accept_websocket,require_websocket @accept_websocket

  • Django使用Channels实现WebSocket的方法

    WebSocket - 开启通往新世界的大门 WebSocket是什么? WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket允许服务端主动向客户端推送数据.在WebSocket协议中,客户端浏览器和服务器只需要完成一次握手就可以创建持久性的连接,并在浏览器和服务器之间进行双向的数据传输. WebSocket有什么用? WebSocket区别于HTTP协议的一个最为显著的特点是,WebSocket协议可以由服务端主动发起消息,对于浏览器需要及时接收数据变化的场景非常

  • django使用django-apscheduler 实现定时任务的例子

    下载: pip install apscheduler pip install django-apscheduler 将 django-apscheduler 加到项目中settings的INSTALLED_APPS中 INSTALLED_APPS = [ .... 'django_apscheduler', ] 然后迁移文件后 ./manage.py migrate 生成两个表:django_apscheduler_djangojob 和 django_apscheduler_djangojo

  • 在django admin中添加自定义视图的例子

    django admin提供了完善的用户管理和数据模型管理,方便实用.研究了一下在admin里面添加自己的页面. 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmin(admin.ModelAdmin): 然后在里面写自己的视图处理函数.基类里面的save_model和delete_model函数可以做数据对象的新建和删除的预处理和后处理.自建的函数如果要redirect到自己建的view,反向映射要包含admin:,写成 r

  • django foreignkey外键使用的例子 相当于left join

    django外键使用 一对一 因为django中处于安全和方便将数据库中的表封装成模型,所以很多sql原生的功能无法使用, 比如 left join,但是我们可以使用外键(foreignkey)来满足表表直接的关系. 设置模型 # 在models.py 中添加 # Person 模型有两个外键, School和Province # class Province(models.Model): name = models.CharField('省份', max_length = 10) post =

  • django 控制页面跳转的例子

    如下所示: def delEquipment(request, delip): print delip ip=delip conn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='1234567', db ='DEVOPS' ) cursor = conn.cursor() #a = cur.execute("select ip,info,env from machine_info where env=%

  • python django model联合主键的例子

    今天,在家试试django的model的设置,如何设置的联合主键,我经过查资料和实践,把结果记录如下: 例如: class user(Model): id=AutoField(primary_key=True) name = CharField(max_length=30) age =IntegerField() class role(Model): id=AutoField(primary_key=True) name=CharField(max_length=10) 这是两个model有一个

  • python django 原生sql 获取数据的例子

    如下所示: node2:/django/mysite/blog#cat views.py 1, # -*- coding: utf-8 -*- from __future__ import unicode_literals # from django.shortcuts import render, render_to_response from .models import * # Create your views here. from django.http import HttpResp

  • django 使用 PIL 压缩图片的例子

    在最近做项目时,发现服务器上的图片比较大,数据传输时会消耗很多流量,体验非常不好.为了缓解这一现象,决定使用gzip压缩数据流,但是发现gzip对于json数据的压缩效果很好,但对于图片的压缩效果很差.无奈,只能写一段代码,将服务器上的图片挨个压缩一下. 我的服务器上的程序,是用django写的,数据库为sqlite,图片文件存储在media目录下. 先看models.py,只有一个ImageField类型的变量picture,也就是一会压缩图片需要用到的变量. class CrossPictu

  • 基于django传递数据到后端的例子

    最近遇到一个问题,前端表单我写了多个按钮,每个按钮通过for循环来给name赋值如下: <input type="button" class="btn btn-info btn-xs" name="{{item.document}}" value="解析" οnclick="Parsefunc(this.name)"> 问题是我想要实现点击哪个按钮就传对应按钮的值到后端,对于我这样的前端新手就比

随机推荐