我需要些帮助。我正在使用Django-channels,出于某种目的,我需要进行几个DB调用。文档对我来说不清楚:https://channels.readthedocs.io/en/latest/topics/databases.html
那么,下面哪一种方法是正确的呢?
具有装饰器的每个数据库访问的
封装
发布于 2020-05-15 21:31:50
您可以将对数据库的多个调用放在一个函数中,并由database_sync_to_async装饰器包装,如下面的示例所示(聊天室如预期:)
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)https://stackoverflow.com/questions/49852825
复制相似问题