Django Channels полный путь к изображению
Если я хочу получить полный путь к изображению в django rest, мне просто нужно написать что-то вроде этого:
def get(self, request)
qs = SomeModel.objects.all()
serializer = SomeSerializer(qs, many=True, context={'request': request})
return Response(serializer.data)
И тогда результат будет
{
"image": "http://127.0.0.1:8000/media/someimg.png"
}
Но не существует request django channels. Я знаю, что есть self.scope, но он не может быть использован как request. Есть ли возможность получить request или даже какой-то класс с функцией build_absolute_uri() внутри consumer?
Вот некоторые из моих кодов:
Потребители:
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
user = self.scope['user']
chat_room = ChatRoom.objects.get(pk=self.room_name)
message = Message.objects.create(author=user, chat_room=chat_room, content=message).pk
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
serializer = WSMessageSerializer(Message.objects.get(pk=message))
# Send message to WebSocket
self.send(text_data=json.dumps(serializer.data))
WSMessageSerializer:
class WSMessageSerializer(serializers.ModelSerializer):
author = FriendSerializer()
class Meta:
model = Message
fields = ['id', 'author', 'content', 'created_at']
FriendSerializer:
class FriendSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ['id',
'username',
'first_name',
'last_name',
'full_name',
'pfp']