python模块之 异步channels实现

本文详细介绍了如何在Django项目中利用channels和Redis搭建WebSocket服务器,实现点对点和群聊功能,涉及安装配置、中间件认证、视图函数和路由设计。


前言

本篇博文是通过python的django一系列出的,如果遇到一些知识盲区可以访问该系列下的其他博文,这次的使用会涉及到django视图函数CBV的一些知识,也可能需要postman接口测试工具,以及虚拟环境搭建。

关于虚拟环境的搭建、以及django视图函数CBV的讲解、postman接口测试
访问链接:https://blog.csdn.net/weixin_45859193/article/details/115408555

一、redis的安装以及配置

这里因为一般redis的安装都是直接确定确定的点的安装,所以如果需要安装的过程可以
访问链接:https://pythonav.com/wiki/detail/10/82/

那么在安装之前,安装过的通过redis-cli -v命令查看redis版本(版本必须大于5.0以上,不然配置channels_redis时可能会导致报错)

安装完成后我们新建一个django项目(python manage.py startapp 项目名称(这里用blog))并且django的版本也需要3.0以上的版本。

此时我们的redis配置settings.py如下:

CACHES = {
   
   
    "default": {
   
   
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",  # 安装redis的主机的 IP 和 端口
        "OPTIONS": {
   
   
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
   
   
                "max_connections": 1000,
                "encoding": 'utf-8'
            },
            "PASSWORD": "xxx"  # redis密码有密码就设置
        }
    }
}

那么自此redis的配置就完成了。

二、channels的安装配置、函数详解

安装channels很简单,只需要通过pip install channels即可,不过要想channles可以使用redis,则需要在安装一个channels_redispip install channels_redis。安装完成后,我们需要配置一下awsgi(如果有的话则不需要添加)。

创建wsgi.py(settings.py同目录下)如下:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "根项目.settings.py")

application = get_wsgi_application()

之后挂载awsgi到settings.py如下:

ASGI_APPLICATION = '根目录.routing.application'

此时asgi已经配置完毕。

然后我们需要配置channels使其与redis连接settings.py如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'channels'
]
CHANNEL_LAYERS = {
   
   
            "default": {
   
   
                "BACKEND": "channels_redis.core.RedisChannelLayer",
                "CONFIG": {
   
   
                    # "hosts": ["redis://:密码@127.0.0.1:6379/0"], # 有密码的这样写
                    "hosts": ["redis://127.0.0.1:6379/0"], # 没密码的这样写
                },
            },
}

配置完成后我们需要测试一下,看看channels是否与redis关联起来了,此时打开控制台输入:

python manage.py shell
import channels.layers
channel_layer = channels.layers.get_channel_layer()
from asgiref.sync import async_to_sync
# 关键一步,报错说明没安装上面操作来(添加操作)
async_to_sync(channel_layer.send)('test_channel',{
   
   'type':'hello'})
async_to_sync(channel_layer.receive)('test_channel')
# 获取通道 {'type': 'hello'}

如果没有报错那么我们将可以继续进行下一步,如果报错了的可以查看一下是否为redis的版本太低,或redis配置未生效等其他原因。


在新建的项目中创建auth/auth.py用作中间件用户认证操作如下:

from channels.db import database_sync_to_async
from django.contrib.auth.models import AnonymousUser
from api.models import UserInfo


@database_sync_to_async
def get_user(token):
    user_object = UserInfo.objects.filter(token=token).first()
    # 判断是否token不正确或用户不存在
    try:
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值