当前位置: 首页 > wzjs >正文

徐州市城乡建设局门户网站seo营销外包

徐州市城乡建设局门户网站,seo营销外包,青岛网站推广企业,永嘉移动网站建设公司这里写自定义目录标题 **1. 配置 asgi.py 文件****asgi.py 配置** **2. 配置 WebSocket 路由****routing.py 配置** **3. 配置 WebSocket 消费者****consumers.py 配置** **4. 配置普通 HTTP 视图****views.py 配置****urls.py 配置** **5. 配置 settings.py 文件****6. 启动 D…

这里写自定义目录标题

    • **1. 配置 `asgi.py` 文件**
      • **`asgi.py` 配置**
    • **2. 配置 WebSocket 路由**
      • **`routing.py` 配置**
    • **3. 配置 WebSocket 消费者**
      • **`consumers.py` 配置**
    • **4. 配置普通 HTTP 视图**
      • **`views.py` 配置**
      • **`urls.py` 配置**
    • **5. 配置 `settings.py` 文件**
    • **6. 启动 Django 项目**
      • **方式 1:使用 Daphne 启动 ASGI 服务器**
      • **方式 2:使用 Uvicorn 启动 ASGI 服务器**
      • **方式 3:在 PyCharm 中配置运行**
    • **7. 测试 WebSocket 和 HTTP 请求**
    • **总结**

要在 Django 项目中同时支持 WebSocket普通视图(HTTP 请求)的访问,你需要正确配置 Django ASGIWSGI 的路由,使得两者可以并行运行。Django Channels 会处理 WebSocket 连接,而传统的 HTTP 请求可以通过 Django 的视图处理。

以下是详细的配置步骤,让你在同一个 Django 项目中同时支持 WebSocket 和传统的 HTTP API 访问:


1. 配置 asgi.py 文件

asgi.py 中,你需要同时配置 HTTP 和 WebSocket 路由。ProtocolTypeRouter 会根据请求的类型来分发请求:

  • HTTP 请求:使用标准的 Django WSGI 应用处理(get_asgi_application())。
  • WebSocket 请求:通过 Channels 处理 WebSocket 连接。

asgi.py 配置

# your_project_name/asgi.pyimport os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
import your_app.routing  # 引入 WebSocket 路由os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')application = ProtocolTypeRouter({"http": get_asgi_application(),  # 处理传统 HTTP 请求"websocket": AuthMiddlewareStack(  # 处理 WebSocket 请求URLRouter(your_app.routing.websocket_urlpatterns  # 配置 WebSocket 路由)),
})
  • get_asgi_application() 负责处理所有的 HTTP 请求(GET、POST、PUT 等)。
  • AuthMiddlewareStack 用于 WebSocket 的认证中间件(可以扩展用于 WebSocket 认证)。
  • your_app.routing.websocket_urlpatterns 是你配置 WebSocket 路由的地方。

2. 配置 WebSocket 路由

在你的应用的 routing.py 文件中配置 WebSocket 路由:

routing.py 配置

# your_app/routing.pyfrom django.urls import path
from . import consumerswebsocket_urlpatterns = [path('ws/test/', consumers.TestConsumer.as_asgi()),  # WebSocket 路由
]

这里的 TestConsumer 是 WebSocket 消费者类,负责接收和处理 WebSocket 请求。


3. 配置 WebSocket 消费者

consumers.py 中,你定义了如何处理 WebSocket 连接。以下是一个简单的例子:

consumers.py 配置

import json
from channels.generic.websocket import AsyncWebsocketConsumerclass TestConsumer(AsyncWebsocketConsumer):async def connect(self):self.room_name = 'test_room'self.room_group_name = f'chat_{self.room_name}'# 加入房间组await self.channel_layer.group_add(self.room_group_name,self.channel_name)await self.accept()async def disconnect(self, close_code):# 离开房间组await self.channel_layer.group_discard(self.room_group_name,self.channel_name)async def receive(self, text_data):text_data_json = json.loads(text_data)message = text_data_json['message']# 将消息发送到房间组await self.channel_layer.group_send(self.room_group_name,{'type': 'chat_message','message': message})async def chat_message(self, event):message = event['message']# 发送消息到 WebSocketawait self.send(text_data=json.dumps({'message': message}))
  • connect:处理 WebSocket 连接时的逻辑,加入一个房间。
  • disconnect:处理断开连接时的逻辑。
  • receive:接收来自客户端的消息,并广播给房间内的其他客户端。
  • chat_message:当有消息需要广播时,发送到所有客户端。

4. 配置普通 HTTP 视图

你可以像正常的 Django 项目一样,使用视图来处理普通的 HTTP 请求。

views.py 配置

例如,创建一个简单的视图,返回 JSON 数据:

# your_app/views.pyfrom django.http import JsonResponsedef api_view(request):return JsonResponse({'message': 'Hello, this is a regular HTTP API'})

urls.py 配置

urls.py 中配置 HTTP 路由:

# your_app/urls.pyfrom django.urls import path
from .views import api_viewurlpatterns = [path('api/hello/', api_view),  # 普通的 HTTP 接口
]

5. 配置 settings.py 文件

settings.py 文件中,确认配置了 ASGI_APPLICATION,指向 asgi.py 文件:

# settings.pyASGI_APPLICATION = 'your_project_name.asgi.application'

如果你打算使用 Redis 作为 WebSocket 的通道层,配置 CHANNEL_LAYERS

# settings.pyCHANNEL_LAYERS = {"default": {"BACKEND": "channels_redis.core.RedisChannelLayer","CONFIG": {"hosts": [("127.0.0.1", 6379)],  # Redis 服务器地址},},
}

如果不使用 Redis,可以改用 InMemoryChannelLayer

CHANNEL_LAYERS = {"default": {"BACKEND": "channels.layers.InMemoryChannelLayer",},
}

6. 启动 Django 项目

方式 1:使用 Daphne 启动 ASGI 服务器

安装 Daphne:

pip install daphne

然后通过 Daphne 启动 Django ASGI 应用:

daphne your_project_name.asgi:application

方式 2:使用 Uvicorn 启动 ASGI 服务器

安装 Uvicorn:

pip install uvicorn

通过 Uvicorn 启动:

uvicorn your_project_name.asgi:application --host 0.0.0.0 --port 8000

方式 3:在 PyCharm 中配置运行

你可以在 PyCharm 中创建一个 Django 配置,确保 ASGI_APPLICATION 配置正确,然后启动 ASGI 服务器。具体步骤如下:

  1. 打开 PyCharm,点击 Run > Edit Configurations
  2. 点击 “+”,选择 Django Server
  3. 配置你的项目名称、主机和端口。
  4. 设置 Targetyour_project_name.asgi:application
  5. 点击 Run 启动。

7. 测试 WebSocket 和 HTTP 请求

  • WebSocket:可以在浏览器控制台或 Vue 前端应用中,使用 WebSocket 连接:
const socket = new WebSocket('ws://localhost:8000/ws/test/');socket.onopen = function(event) {console.log('WebSocket Connected');socket.send(JSON.stringify({ 'message': 'Hello, WebSocket!' }));
};socket.onmessage = function(event) {const data = JSON.parse(event.data);console.log('Received:', data.message);
};socket.onclose = function(event) {console.log('WebSocket Closed');
};
  • HTTP 请求:可以通过浏览器直接访问 http://localhost:8000/api/hello/ 或通过 API 客户端进行调用,验证是否能正常访问传统的 HTTP 路由。

总结

通过配置 asgi.py 中的 ProtocolTypeRouter,你可以在同一个 Django 项目中同时支持:

  1. 普通的 HTTP 视图:通过 get_asgi_application() 处理。
  2. WebSocket 连接:通过 Channels 的 URLRouter 和消费者进行处理。

这样,无论是 普通的 HTTP 请求 还是 实时的 WebSocket 连接,都可以并行工作,并且互不干扰。


文章转载自:

http://93rluNWI.qghjc.cn
http://SeT82qoI.qghjc.cn
http://xXjczyVD.qghjc.cn
http://dxL0Dp0T.qghjc.cn
http://VPqv38De.qghjc.cn
http://Uo0TnW2H.qghjc.cn
http://1UQOI5Wf.qghjc.cn
http://3YZoMrI8.qghjc.cn
http://eMIOvbDY.qghjc.cn
http://f8XzMHJK.qghjc.cn
http://aJT4sfcc.qghjc.cn
http://ghJxabVX.qghjc.cn
http://knggvG89.qghjc.cn
http://8jDJj6g8.qghjc.cn
http://SyRepvga.qghjc.cn
http://4BeAYh9o.qghjc.cn
http://Ck26AiVN.qghjc.cn
http://TGzcd2eu.qghjc.cn
http://oscXRqvV.qghjc.cn
http://hFfJYCEK.qghjc.cn
http://dQu6inWn.qghjc.cn
http://nRk6LB6m.qghjc.cn
http://HlRqzCh4.qghjc.cn
http://T2t3nNKb.qghjc.cn
http://TVETcHZk.qghjc.cn
http://D6zqoQx3.qghjc.cn
http://y1k4y52L.qghjc.cn
http://vhMYWYSD.qghjc.cn
http://GpdWbc6H.qghjc.cn
http://lD5MELKa.qghjc.cn
http://www.dtcms.com/wzjs/715986.html

相关文章:

  • 中山品牌网站建设报价网上申请开办公司流程
  • 彩票网站开发是否可以云虚拟主机可以做视频网站不
  • 电子商务网站建设要求丹东做网站哪家好
  • 网站建设功能定位怎么写北京 做网站比较有名的
  • 艺术设计专业灵感推荐网站品牌策划营销
  • 织梦做的网站总是被攻击建站快车的应用场景
  • 廉江网站制作河北一建停考
  • 重庆物流公司网站建设福建建设科技人才网站
  • 无锡网络公司可以制作网站百度域名多少钱
  • 门户营销型网站搭建境外建网站
  • 网站结构怎么做适合优化做羊水亲子鉴定网站
  • 重庆网站设计费用网络营销品牌推广公司哪家好
  • 企业网站如何进行定位网站建设 企炬江阴
  • 惠州 网站建设公司标书制作模板
  • 嘉兴城乡建设局网站网站二级页面怎么做
  • wordpress建站有什么好处广告牌免费设计在线生成
  • 重庆网站建设公司哪个最好做影视网站挣钱吗
  • 中国网站开发用盗版犯法英语学习软件
  • 郑州建设电商网站厦门旅游网站建设
  • 苏州企业商务网站建设个人博客网站设计
  • 人力资源三网站建设制作h5页面的软件
  • php做网站示例网上销售型企业网站
  • 美食网站怎么做dw长沙网络营销介绍
  • 营销型网站建设的5大技巧服务类网站建设服务公司
  • 陕西住房与建设厅网站湖北正规网站建设质量保障
  • 做自动化设备哪个网站网站空间提供
  • 汕头市广州新业建设有限公司网站科技官网
  • 邯郸网站建设优化移动端ui
  • 中国城乡建设部网站房贴文件电子商务网站成功的关键是
  • 有好点的网站建设公司吗网络广告一般收费价目表