首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django-channels中通过异步代码访问数据库

在Django-channels中通过异步代码访问数据库
EN

Stack Overflow用户
提问于 2018-04-16 16:31:49
回答 1查看 1.1K关注 0票数 1

我需要些帮助。我正在使用Django-channels,出于某种目的,我需要进行几个DB调用。文档对我来说不清楚:https://channels.readthedocs.io/en/latest/topics/databases.html

那么,下面哪一种方法是正确的呢?

具有装饰器的每个数据库访问的

  1. 创建/调用函数。
  2. 在一个函数中执行对数据库的所有调用,该函数由装饰器

封装

EN

回答 1

Stack Overflow用户

发布于 2020-05-15 21:31:50

您可以将对数据库的多个调用放在一个函数中,并由database_sync_to_async装饰器包装,如下面的示例所示(聊天室如预期:)

代码语言:javascript
复制
class ChatConsumer(AsyncWebsocketConsumer):

async def connect(self):
    self.room_name = self.scope['url_route']['kwargs']['room_name']
    print(self.scope['user'].username)

    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=None, bytes_data=None):
    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']
    sender = self.scope["user"].username
    receiver = self.scope['path'].split('_')[1]
    await self.post_message(sender = sender , receiver = receiver , message = message)
    await self.send(text_data = json.dumps({'message': message})) 

@database_sync_to_async
def post_message(self , sender  , receiver , message):
    sender = User.objects.filter(username = sender)[0]
    receiver = User.objects.filter(username = sender)[0]
    Message.objects.create(sender = sender , receiver = receiver , text = message)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49852825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档