如何POST / PUT将数据写入RESTful API

时间:2013-12-26 04:44:05

标签: python django scrapy tastypie

我有一个输出JSON的刮刀。我想以编程方式读取此输出(例如,每天)并通过像Tastypie这样的RESTful API将其反序列化为我的Django模型。我想在更新模型之前检查任何重复的条目/验证数据。

最佳做法和最无缝的方法是什么?

-

来自Scraper的JSON输出(返回结构化数据)

注意:exchange_id是我的Django模型中的Exchange对象的外键

{ “网站”:“http://www.igg.com/”, “exchange_id”:1, “自动收报机”:“8002”, “full_name”:“IGG Inc” }

Django模型

class Company (models.Model):
    ticker      = models.CharField(max_length=10, null=True)
    full_name   = models.CharField(max_length=200, null=True)
    exchange    = models.ForeignKey(Exchange, null=True)
    website     = models.URLField(null=True)

    def __unicode__(self):
        return self.ticker

    def website_url(self):
        if self.website:
            return '<a href="%s">%s</a>' % (self.website, self.website)
        else:
            return ''
    website_url.allow_tags = True        

    class Meta:
        verbose_name_plural = "Companies"

2 个答案:

答案 0 :(得分:0)

我将假设您的应用是私有的,只有您可以访问它。你可以做的是用模型形式实现django-restless。

from restless.http import Http201, Http400
from restless.views import Endpoint
from .forms import NewCompanyForm

class APIEndpoint(Endpoint):
    """
    Endpoint for posting json data to server
    """
    def post(self, request):
        company_form = NewCompanyForm(request.data)
        if company_form.is_valid():
            # Check for duplicate data
            # ...
            if unique:
                company_form.save()
                return Http201({"message": "Post successful"})
            else:
                return Http400(reason='Data was not unique')
        else:
            return Http400(reason='You did not post a valid input')

此外,这是一个使用此库的示例应用程序https://github.com/dobarkod/django-restless/blob/master/testproject/testapp/views.py

答案 1 :(得分:0)

据我了解,您需要一些工具通过RestAPI将数据发布/放入您的服务。看看slumber。它非常简单,非常好与tastypie交互。