web2py--------------用web2py写 django的例子 --------建立一个投票应用(3)

我们建立了数据模型,然后这次来进行页面的展示

1、这里是列表页面的 control

这里是dal的语法

只有两行

第一行 是查询出所有问题,也就是问题的id大于0

第二行是返回问题的列表

这里是view

我们在view曾只需要一个for循环其实就可以展示出所有的数据,

但是需要用if判断一下是否为空,贴心的处理一下不为空的情况

注意:

每个{{if }}  {{for}} 这样的逻辑标签,后边是有“:”冒号的,而且有配对的{{pass}}标签宣告他结束

正是因为这些标签,似的写 web2py 跟写 php 一样 的没有底线,直接在view 中使用函数。。

数据层我们已经写好了,这里也不做修改

下面是展示页面

红色部分就是我们从数据库查出来的数据,问我为什么有两条,我是不会告诉你,我有添加了几条,怎么添加,可以去看看 前面的教程

2、然后是 detial 也就是详情页面

这里是 control写的内容

做个简单的解释,

第一句, 请求的 第一个参数,其实就是 question的id,

第二句,查询出这个问题

第三句,查询出这个问题的回答

我们向前台返回问题,和问题选项

是不是简单明了

下面是view

具体标签就不说做什么用的了,话说我写完的时候是有缩进的,但是,现在没了。不过只有form才有包含关系啦,也没什么好复杂的

是的 接下来是 小小的展示环节,我觉得还是很和谐的么

 

3、验证环节

细心的同学会发现有一个 都有使用一个    URL()这样的一个函数

这个就是为了拼接地址而生的函数,对应的默认参数分别是 app,controller,view,然后加上参数

这个验证的controller不对应view

所以只有一个controller

代码如下

redirect()函数将重定向到 results 哪里,

4、结果查看  results

不说了,如果不是小教程,这个绝对是个冗余代码,不过也很好维护,没什么复杂的内容,有时候有些冗余也是不错的,不过也不能说是冗余参见detail部分

这个可是有意思了,django的教程贴心的判断了一下 是不是复数,反正如果不是问一下,我也忘了那个标签是干什么的了,这样写道view里边是不是格外的扎眼?

我们来看看最终效果

好了现在django给的官方的例子已经完成了,

它剩下的内容是关于 cbv 的,但是web2py 不支持

所以这个教程也算是个入门而已,

只是告诉大家,殊途同归,

只不过每个框架都有自己可取的事情,例如如果有需求,完全可以按照web2py 的自身的优势来,无论是代码量,还是效果,都会比这个好的多。

现在 就这样吧,拜拜

有问题可以私信或者留言

===============================================================================

 此处应该有源码

转载于:https://www.cnblogs.com/bufubaoni/p/5847228.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django-Channels 是一个基于 Django 框架的 WebSocket 库,用于实现实时应用程序。要发送 WebSocket 消息,您可以按照以下步骤进行操作: 1. 在 Django-Channels 的 consumer 中定义一个 WebSocket 处理函数,例如: ```python from channels.generic.websocket import AsyncWebsocketConsumer import json class MyConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() async def disconnect(self, close_code): pass async def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json['message'] await self.send(text_data=json.dumps({ 'message': message })) ``` 2. 在前端代码中创建 WebSocket 连接并发送消息,例如: ```javascript const socket = new WebSocket('ws://localhost:8000/ws/my_consumer/'); socket.onopen = function(event) { console.log('WebSocket is connected.'); }; socket.onmessage = function(event) { console.log('Message received:', event.data); }; socket.onclose = function(event) { console.log('WebSocket is closed.'); }; const message = { 'message': 'Hello, world!' }; socket.send(JSON.stringify(message)); ``` 在这个例子中,我们创建了一个 WebSocket 连接,并将消息发送到 `MyConsumer` consumer 中。当 `MyConsumer` consumer 接收到消息时,它将发送一个响应消息回到前端,前端代码将在 `onmessage` 回调函数中接收到响应消息并在控制台中打印出来。 注意,在生产环境中,您应该将 WebSocket 连接配置为使用 HTTPS 而不是 HTTP,并使用适当的身份验证和授权方法来保护您的应用程序。 ### 回答2: Django-Channels是一个用于构建实时Web应用程序的库,它支持使用WebSocket进行实时通信。在Django-Channels中,我们可以使用`channels.layers`模块来发送socket消息。 首先,我们需要在Django的设置文件中配置Channels。我们需要添加Channels的应用,并设置`ASGI_APPLICATION`为我们的应用名称。如下所示: ```python INSTALLED_APPS = [ ... 'channels', ] ASGI_APPLICATION = 'myproject.routing.application' ``` 接下来,我们需要创建一个routing.py文件来配置Channels路由。在这个文件中,我们可以定义消息路由的处理函数。示例如下: ```python from channels.routing import ProtocolTypeRouter, URLRouter from myapp import consumers application = ProtocolTypeRouter({ 'websocket': URLRouter([ url(r'^ws/myapp/(?P<room_name>\w+)/$', consumers.ChatConsumer), ]), }) ``` 然后,我们可以创建一个消费者类来处理接收到的消息,并使用Channels的`channels.layers`模块发送socket消息。在这个类中,我们可以重`connect`、`disconnect`、`receive`等方法来处理连接、断开连接和接收消息的逻辑。以下是一个简单的示例: ```python from channels.generic.websocket import AsyncWebsocketConsumer from channels.layers import get_channel_layer from asgiref.sync import async_to_sync class MyConsumer(AsyncWebsocketConsumer): async def connect(self): self.room_name = self.scope['url_route']['kwargs']['room_name'] self.room_group_name = 'chat_%s' % 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): await self.channel_layer.group_send( self.room_group_name, { 'type': 'chat_message', 'message': text_data } ) async def chat_message(self, event): message = event['message'] await self.send(text_data=message) ``` 最后,我们可以在需要发送socket消息的地方,使用`channel_layer`模块获取channel层对象,并使用其`group_send`方法来发送消息。以下是一个简单的示例: ```python from channels.layers import get_channel_layer from asgiref.sync import async_to_sync channel_layer = get_channel_layer() async_to_sync(channel_layer.group_send)( 'chat_room', { 'type': 'chat_message', 'message': 'Hello, World!' } ) ``` 以上是使用Django-Channels发送socket消息的基本实现代码。当有客户端连接到我们定义的WebSocket路由时,将会触发对应的消费者类方法,并通过`channel_layer`发送消息给指定的群组或客户端。 ### 回答3: Django-Channels是一个基于Django的扩展,用于为Web应用程序添加实时功能。它可以通过WebSocket协议发送和接收消息。以下是一个使用Django-Channels发送socket的代码示例: 首先,安装Django-Channels和其依赖项。可以使用pip命令来安装: ``` pip install channels ``` 然后,将Channels添加到您的Django项目的`INSTALLED_APPS`中。在您的项目的`settings.py`文件中进行如下配置: ```python INSTALLED_APPS = [ ... 'channels', ... ] ``` 接下来,创建一个名为`consumers.py`的文件,用于定义处理WebSockets连接的消费者: ```python from channels.generic.websocket import WebsocketConsumer class MyConsumer(WebsocketConsumer): def connect(self): # 连接成功时调用 self.accept() def disconnect(self, close_code): # 断开连接时调用 pass def receive(self, text_data): # 接收到来自客户端的消息时调用 pass def send_message(self, text_data): # 向客户端发送消息 self.send(text_data) ``` 在您的Django项目的`routing.py`文件中,配置将传入的WebSocket连接传递给相应的消费者: ```python from django.urls import path from . import consumers websocket_urlpatterns = [ path('ws/my-consumer/', consumers.MyConsumer.as_asgi()), ] ``` 最后,在您的Django项目的`settings.py`文件中启用Channels: ```python ASGI_APPLICATION = 'myapp.routing.application' ``` 现在,您可以在任何视图或其他地方使用以下代码来向客户端发送WebSocket消息: ```python from asgiref.sync import async_to_sync from channels.layers import get_channel_layer channel_layer = get_channel_layer() def send_socket_message(message): async_to_sync(channel_layer.group_send)('my-group', { 'type': 'send_message', 'text': message }) ``` 这将向名称为`my-group`的组中的所有客户端发送消息。 以上就是使用Django-Channels发送socket的代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值