纠纷奇闻作文社交美文家庭
聚热点
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Django实战21Channels实现WebSocket

5月25日 呛人心投稿
  在Django中实现WebSocket通信常见的两种方法分别一种是通过dwebsocket和Channels,dwebsocket模块基于djangowebsocket开发(dwebsocket使用可以参考文章:Django实战018:dwebsocket成功实现WebSocket),但是由于djangowebsocket已经停止开发所以dwebsocket的更新也基本停滞了。Channels为提升Django的ASGI能力开发的插件,可以同时处理HTTP、HTTP2、WebSocket协议。channels在保留了原生django的同步和易用的特性上还带来了异步处理方式,并且将django自带的认证系统以及session集成到模块中,扩展性非常强(官方推荐的插件)。
  安装Channels
  Python安装模块很简单,直接用pip来在线安装:pipinstallUchannels。channels安装需要下载很多依赖包,这些包用官方源容易下载超时(建议换源再装,pip换源可以参考文章:Django实战012:PIP配置国内镜像源及使用)。这里U指upgrade,如果已安装就升级到最新版。官方源安装很多依赖包下载的容易超时,建议换源再安装pipinstallUchannels也可以临时指定安装源,U指upgrade,如果已安装就升级到最新版pythonmpipinstallUchannelsihttps:pypi。tuna。tsinghua。edu。cnsimpleSuccessfullyinstalledAutomat20。2。0PyHamcrest2。0。2attrs20。3。0autobahn20。12。3cffi1。14。4channels3。0。3constantly15。1。0cryptography3。3。1daphne3。0。1hyperlink21。0。0idna3。1incremental17。5。0pyasn10。4。8pyasn1modules0。2。8pycparser2。20pyopenssl20。0。1serviceidentity18。1。0twisted20。3。0txaio20。12。1zope。interface5。2。0集成Channels框架
  Django2。x不支持ASGI,所以实现WebSocket需要集成Channels框架(貌似Django3。x无依赖就支持WebSocket)。我们需要创建consumers。py和routing。py文件,routing。py相当于Django中的url用来映射路由和执行函数之间的关系。当监听到websocket的请求时,Django会根据routing。py来触发相应的执行函数。consumers。py则相当于Django中的views视图,在这里定义执行函数及相应的业务逻辑处理。在wsgi。py同级目录新增文件asgi。py(如果你安装了channels在创建项目会自动生成该文件,但是还是需要修改),将Django运行切换到ASGI而不是WSGI服务。importos,djangofromchannels。routingimportgetdefaultapplicationos。environ。setdefault(DJANGOSETTINGSMODULE,channelserver。settings)django。setup()applicationgetdefaultapplication()配置Channels
  要在Django项目中使用Channels就需要将Channels库添加到已安装的应用程序列表中,编辑settings。py件将channels添加到INSTALLEDAPPS设置中。Channels走的是通道模式,所以我们需要设置Django以通道模式运行。通过ASGIAPPLICATION来指定Django开启通道。如果有多个通道的话可以使用Redis作为我们的通道层,这时候就需要安装asgiredis配合了(需安装redis)。INSTALLEDAPPS〔django。contrib。admin,django。contrib。auth,django。contrib。contenttypes,django。contrib。sessions,django。contrib。messages,django。contrib。staticfiles,corsheaders,跨域处理channels,注册Channels〕启用ASGIASGIAPPLICATIONchannelserver。routing。application定义routing。py
  在项目settings文件同级目录中新增routing。py,利用Channels的routring模块中的方法来实现路由分发。如果你需要认证可以添加中间件AuthMiddlewareStack或者SessionMiddlewareStack,不需要则直接在URLRouter中定义路由指向。fromchannels。authimportAuthMiddlewareStackfromchannels。sessionsimportSessionMiddlewareStackfromchannels。routingimportProtocolTypeRouter,URLRouterfromdjango。urlsimportpath,repathfromchannelserver。consumersimportconsumersapplicationProtocolTypeRouter({websocket:AuthMiddlewareStack(websocket:SessionMiddlewareStack(URLRouter(〔Emptyfornow(httpdjangoviewsisaddedbydefault)path(wsparameterstr:roomname,consumers),path(ncdev,test()),〕))})定义consumers。py
  这个是核心的功能模块,需要单独拿出来说明。这里我们就简单的测试下整个项目是否可以正常地运行和被访问,这里我们定义一个简单的test类来测试下Channels。当链接进来的时候我们打印链接上了,当我们接收到客户端消息的时候打印已发送数据,当客户端断开链接的时候我们打印链接断开啦。classtest(WebsocketConsumer):当Websocket创建连接时defconnect(self):self。accept()保持连接!必须写这步print(连接上啦)当Websocket接收到消息时defreceive(self,textdataNone,bytesdataNone):self。send(textdata)print(已发送数据)当Websocket发生断开连接时defdisconnect(self,code):print(断开连接啦)运行项目
  当前项目运行环境为:python3。7。9Django2。2Channels3。0。3,项目运行直接通过命令:pythonmanagerunserver来启动。然后通过Vue前端向Django发送一个websocket请求,我们可以看到后台已经打印了字符符:webscoketrequest!!!(说明请求已经进来了)。
  Channels测试
  这里我们用个WebScoket客户端测试工具来测试下请求结果,分别点击链接、发送数据、断开来测试刚才的几个接口是否能正常响应。在右侧我们可以看到服务端给我们返回了我们发送的数据,说明我们的WebScoket链接已经成功建立并可以发送数据。
  以上内容是小编给大家分享的【Django实战021:Channels实现WebSocket】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
投诉 评论 转载

Django实战21Channels实现WebSocket在Django中实现WebSocket通信常见的两种方法分别一种是通过dwebsocket和Channels,dwebsocket模块基于djangowebsocket开发(d……手机的上网许可证撕了有什么影响?可以说是老生常谈的问题了,从智能手机刚出就自带上网许可证,就好像地球绕着太阳转一样,追寻着自然的规律。那到底上网许可证是什么东西,代表着什么,为什么会有这个东西。首先这东……汽车用品入驻京东自营需要什么条件?哪里可以入驻?入驻自营的商家越来越多,京东对于商家的实力要求也更加严格,那么汽车用品入驻自营需要什么条件呢?一、入驻需要的资料1、营业执照(注册自营满100w,时间1年)2……PK汉兰达,动力好又省油的居然是揽月,但却被两大短板绊住了奇瑞旗下的星途揽月已经上市几个月了,作为一款搭载奇瑞最新2。0T涡轮增压发动机的中大型SUV,这款车也是受到了车友圈的广泛关注。最强2。0T综合实力力压汉兰达应该说……雷军正式公布!小米12本月28日推出,iPhone13min处于传闻中的小米12系列终于有了进一步的消息。根据小米官方透露的信息来看,小米12系列将于12月28日推出。除此之外,雷军还正式公布了小米12、小米12Pro的定位。跟以……20万左右合资紧凑型SUV,CRV和RAV4荣放怎么选?对比当下SUV市场竞争激烈,消费者之所以喜欢SUV,主要一方面是SUV本身具有更大气的外形,以及更宽敞的乘坐空间。在合资品牌中,本田CRV和丰田RAV4荣放一直持有较高的关注度,并……Kotlin笔记(内联类)内联类有时,业务逻辑需要围绕某种类型创建包装器。但是,由于额外的堆分配,它会引入运行时开销。此外,如果包装类型是原始类型,则性能损失很糟糕,因为原始类型通常由运行时进行大……京沪穗蓉为何如此火爆?因为好多人是去寻梦天安门流光溢彩,外滩灯火辉煌,广州塔傲立华南,春熙路人潮汹涌,这些景象的背后都是城市经济实力、文化实力以及城市吸引力的急剧上升。资源在哪里,机会在哪里,人们的注意力就在哪……城市人的田园生活昨日,同朋友一起前往一个农村的人家去度周末。上午9点30分,我们一行五人出发,驱车前往朋友在务欢池镇一个农村同学(在车里闲聊的时候了解到,朋友的同学其时家是市里的)的家里……三金影后再有情感大片?周冬雨李易峰同台恋爱,绿厂倾情赞助相信各位影迷对最新刚刚颁发的金鸡奖印象颇深。作为华语电影三大奖之一,本届金鸡奖最佳女主角由《少年的你》女主周冬雨夺得。作为出道十年的知名演员,周冬雨的演技受到了多方肯定,金鸡奖……支付宝对部分用户增数字人民币模块,分为匿名和实名用户,去体验时至今日,马云已经在阿里巴巴中退居二线,正所谓这个江湖虽然没有马云,但是马云的传说依旧在继续。马云虽然退居二线,但是马云对于现在电商领域的贡献是非常大的,这是我们每个人都……飞书推出应用服务保险为用户提供更完善的安全保障随着产品生态体系的逐步壮大,以及中大型客户的快速增长,应用的安全性越来越受到重视。近日,字节跳动旗下企业协作与管理平台飞书正式面向平台上的ISV(独立软件开发商),推出了信息技……
培育实体经济和数字技术融合新优势私家车与美团无人车发生碰撞事故,后者因不在机动车道内行驶负全有史以来最大的电动汽车订单租赁巨头Hertz将采购10万辆特特斯拉回应美国交通局质询所提交的自动驾驶信息,要对外保密中国区收入约占特斯拉全球收入的25,成为其仅次于美国的第二大经典!30张图让你彻底搞懂HTTP面试题,学会后打败70的面LG新能源与电动卡车公司Nikola签订八年电池供应合同搭载海绵硅负极片电池续航超1000km,广汽埃安AIONLX比亚迪将打造5080万区间高端品牌Micro向左,Mini向右,传统LED显示路在何方?首批四驱高性能版旗舰型比亚迪汉EV亮相拉美比亚迪国内首批纯电动铰接车投运宜昌整车电量563。8kWh,
传染病有哪些?热文聚热点网 浅谈华强北顶配四代耳机恒玄2500yp红蜂小四司法鉴定书面申请一般应该怎么写拉力的造句徐友谦小筑冒雨访何通叟途中作站桩时放松入静的方法热传聚热点网 乔春洋:谈谈品牌标志物的设计半月板损伤有积液能带护膝吗今天属相马准合不合(属兔和什么属相最配)吃饭不能喝汤吗k乳怎么用蔡天祐传的原文及译文解析

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形