前言
本篇博文是通过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:

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

被折叠的 条评论
为什么被折叠?



