添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
application = ProtocolTypeRouter ( { # Empty for now (http->django views is added by default)

二、创建私信APP

python manage.py startapp chat

把chat加进安装的app配置

# settings.py
INSTALLED_APPS = [
    'chat.apps.ChatConfig',
    'channels',

因为chat目录下有apps.py文件可以识别

# chat/apps.py
from django.apps import AppConfig
class ChatConfig(AppConfig):
    name = 'chat'

运行时报错 raise SynchronousOnlyOperation(message) You cannot call this from an async context - use a thread or sync_to_async.

HTTP GET /chat/1-2/ 200 [0.00, 127.0.0.1:62738]
WebSocket HANDSHAKING /ws/chat/1-2/ [127.0.0.1:62739]
WebSocket CONNECT /ws/chat/1-2/ [127.0.0.1:62739]
Exception inside application: You cannot call this from an async context - use a thread or sync_to_async.
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\sessions.py", line 183, in __call__
    return await self.inner(receive, self.send)
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\middleware.py", line 41, in coroutine_call
    await inner_instance(receive, send)
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\consumer.py", line 59, in __call__
    [receive, self.channel_receive], self.dispatch
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\utils.py", line 51, in await_many_dispatch
    await dispatch(result)
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\consumer.py", line 73, in dispatch
    await handler(message)
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\channels\generic\websocket.py", line 175, in websocket_connect
    await self.connect()
  File "D:\WORKPLACE\ZhiFou\chat\consumers.py", line 51, in connect
    cursor = connection.cursor ()
  File "D:\SOFTWARE\Python\Python36\lib\site-packages\django\utils\asyncio.py", line 22, in inner
    raise SynchronousOnlyOperation(message)
  You cannot call this from an async context - use a thread or sync_to_async.
WebSocket DISCONNECT /ws/chat/1-2/ [127.0.0.1:62739]

在这里插入图片描述
用django2.2.7不会错,报错是用django3.0

查看django版本的方法之一:
【python cosole】

import django
django.__version__
也欢迎大家光临我另外项目课的其他博客:
Django上课笔记(一)——环境配置与项目创建(过程十分详细) - AcWing
(更新版)Django上课笔记(二)——菜单模块的实现, 含自动创建项目的脚本
Django上课笔记(三)——简单游戏的实现(模块拆分化详解) - AcWing
Django上课笔记(四)——(用户系统的实现) - AcWing
pycharm连接服务器同步写代码(图文详细过程)
linux基础课thrift详细开发过程 - AcWing
                                    本文实例讲述了Django框架用户注销功能实现方法。分享给大家供大家参考,具体如下:
HttpResponse()里有个delete_cookie()方法专门用来删除cookie
我们到此来完整的实现一下:访问首页如果没有登录,就跳转到登录页面,登录成功之后再跳转回来的过程。
3个方法,index、login、logout
# coding:utf-8
from django.shortcuts import render,render_to_response
# Create your views here.
from django.http import HttpResponse
                    今天给大家带来一个我们新上线的教程:《基于 Django 实现 Upwork 众包网站》;使用 Django 框架实现了世界最大的外包网站 Upwork。在实现过程中,将...
                                    Python 使用 django 框架实现多人在线匿名聊天的小程序Python 是一种面向对象解释型计算机程序设计语言, 由 Guido van Rossum 于 1989 年底发明, 第一个公开发行版发行于 1991 年 Python 语法简洁而清晰, 具有丰富和强大的类库它常被昵称为胶水语言, 它能够把用其他语言制作的各种模块 (尤其是 C/C++) 很轻松地联结在一起很多网站都提供了在线匿名...
                                    在channels异步获取MySQL数据时,做到实时推送的功能,但想获取对应类型的多条时,遇到
Exception inside application: You cannot call this from an async context - use a thread or sync_to_async.
多次调试发现
错误代码示例:
@database_sync_to_async
    def get_testTagImg(self,folder):        
                                    对于初学Python的人,没有思路,没有头绪,不知道从哪里开始学习,安装一个Python环境之后就不知道该干嘛了!下面我讲分享Python大牛制作的Python系统学习流程图!Python基础:俗话说:万丈高楼平地起!无论那门编程语言基础都是重中之重!也许它枯燥、乏味,但是都是你为了之后的项目、案例的核心!这里还是要推荐下小编的Python学习群:483546416,不管你是小白还是大牛,小编我都...
                                    上面的 JWTAuthMiddlewareStack 有一个问题,当token 不存在是  get_user(headers) 获取不到返回值为None,再去验证AuthMiddlewareStack 里面的SessionMiddleware 的时候会报错,在session登录的情况下不能验证此websocket已登录。原来django1.11 django2 中使用的认证不能使用了 报错。django3 中使用 websocket 使用JWT 认证。修改认证类 使用async。
                                    首先主要开发环境:1、Django==2.0.2(不要用2.1以上的版本,不是很兼容后面要用到的xadmin管理后台!!!,2.0足够了,后续用到django rest framework+vue可以升级)
2、 Python 3.7.4
3、xadmin后台管理  GitHub下载要注意版本号(自己pip下载的或者官网下载版本不对,很容易出现莫名其妙的Bug,你懂得。。。要自己改导入包和代码,花...
不想看我瞎BB可以直接跳到这里
为了实现双向奔赴通信,我选择websocket;但是Django 3.0往上走就不支持websocket了就很无语,所以这里我通过channels实现websocket。
1.WebSocket
在讲Websocket之前,先了解下 long poll 和...