django模型存储请求响应

时间:2016-05-23 21:59:29

标签: python django django-models

我试图保存apis的回复详情(通常没有记录)。

api可能会随着时间的推移而改变,我会定期向他们请求数据,这些数据通常可能没有变化。
因此,我只想在更改时保存响应,并在上次使用api检查响应时添加时间戳。

我确实开始通过Django ORM进行建模,但我很可能会因为试图规范数据而过于复杂。

请求可以像往常一样,简单的GET请求,带查询的GET或带数据的POST。 响应应该是url(方案,主机名和路径),查询或有效负载的唯一,但我不知道如何最好地建模。我觉得响应JSON或文本与响应有很多关系。但是我觉得必须有一个更简单的方法,因为我刚刚开始不想复制超过必要的存储响应,如上所述。

class Request(models.Model):
    scheme = models.CharField(max_length=10)
    hostname = models.TextField()
    path = models.TextField(null=True)
    method = models.CharField(max_length=10)
    headers = models.TextField()

class Meta:
    unique_together = ('scheme', 'hostname', 'path', 'method')

def __str__(self):
    return self.url


class RequestQuery(models.Model):
    request = models.ForeignKey(Request)
    query = models.TextField()

    def __str__(self):
        return self.query


class RequestPayload(models.Model):
    request = models.ForeignKey(Request)
    payload = models.TextField()  

    def __str__(self):
        return self.payload


class Response(models.Model):
    request = models.ForeignKey(Request)
    query = models.ForeignKey(RequestQuery, null=True)
    payload = models.ForeignKey(RequestPayload, null=True)
    headers = models.TextField()
    status_code = models.IntegerField()
    json = JSONField(null=True)  # stores in either json or text depending on if valid json
    text = models.TextField(null=True)

    class Meta:
        unique_together = ('request', 'status_code')

    def _str_(self):
        return str(self.request.url) + str(self.status_code)


class ResponseHistory(models.Model):
    time_stamp = models.DateTimeField(auto_now_add=True)
    response = models.ForeignKey(Response)

    def __str__(self):
        return self.time_stamp

0 个答案:

没有答案