小编Gui*_*tia的帖子

如何将渠道和 DRF 整合在一起

我目前正在尝试创建一个后端服务器来与一些使用 websocket 的客户端进行通信。客户端向后端发出一些请求,后端通过消费者直接响应客户端。

另外,我有一个需要向客户端发送一些请求的 API。它必须通过消费者打开的套接字。我正在为 API 使用 Django Rest Framework。所以我现在有 2 个应用程序。一种用于消费者,一种用于 API。我想知道这是否是正确的方法。

这实际上是我现在正在考虑的代码:

# mybackendapp/consumers.py

class MyConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.client_id = self.scope['url_route']['kwargs']['client_id']
        # This line I don't get it very well. It comes from:
        # [channels doc: single channels][1]
        # I don't know if I should create the Clients myself or if it's 
        # created automatically
        Clients.objects.create(channel_name=self.channel_name, 
                               self.client_id)
        self.accept()

    async def disconnect(self):
         Clients.objects.filter(channel_name=self.channel_name).delete()

    async def receive(self, text_data):
        self.recv_data = json.loads(text_data)
        if self.recv_data[0] == CLIENT_REQUEST:
            self.handler = ClientRequestHandler(self.client_id, 
                                                self.recv_data) …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework django-channels

5
推荐指数
1
解决办法
3260
查看次数

Django Rest框架:有没有办法在使用序列化器验证数据之前清理数据?

我有一个 API 端点 POST /data。接收到的数据以某种方式格式化,这与我将其存储在数据库中的方式不同。

我将使用 postgis 中的几何类型作为示例。

class MyPostgisModel(models.Model):
    ...
    position = models.PointField(null=True)
    my_charfield = models.CharField(max_length=10)
    ...
    errors = JSONField()  # Used to save the cleaning and validation errors

class MyPostgisSerializer(serializers.ModelSerializer):

    class Meta:
        model = MyPostgisModel
        fields = [
            ...
            "position",
            ...
            "my_charfield",
            "errors",
        ]

    def to_internal_value(self, data):
        ...
        # Here the data is coming in the field geometry but in the db, it's called
        # position. Moreover I need to apply the `GEOSGeometry(json.dumps(...))`
        # method as well. …
Run Code Online (Sandbox Code Playgroud)

serialization django-rest-framework

5
推荐指数
0
解决办法
2019
查看次数