2011-12-27 32 views

回答

38

tastypie cookbook,爲了改變默認的格式,你需要重寫determine_format()方法,在你的ModelResource:

class MyResource(ModelResource): 
    .... 
    def determine_format(self, request): 
     return 'application/json' 

上面的鏈接證明確定輸出格式的替代方法。

此外,我不認爲一個有效的答案本質上是「你不需要這個」。

編輯

看來GregM的答案很可能是(我沒有測試它)是最正確的用TastyPie,as per documentation的新版本把你的settings.py以下將限制序列輸出到JSON。

TASTYPIE_DEFAULT_FORMATS = ['json'] 
+3

'TASTYPIE_DEFAULT_FORMATS'規則! – ducin 2013-08-06 22:11:49

+0

+1這應該是公認的答案! – slackmart 2013-12-13 18:50:43

+0

如果您希望JSON成爲默認值,並且在需要時支持XML,該怎麼辦? – Richard 2015-04-04 15:13:05

1

要檢查/測試你的REST API,使用REST客戶端,而不是瀏覽器,最好是一個知道如何漂亮打印JSON。我使用谷歌瀏覽器的郵差插件。

如果你想在命令行漂亮的JSON:

curl https://api.twitter.com/1.1/search/tweets.json | python -m json.tool 
1

Tasytpie已設置爲 '應用/ JSON的' 默認值。但是這被瀏覽器請求覆蓋。

據Tastypie,默認是由請求頭重寫接受您的格式規範GET即。 ?format = json。當您從瀏覽器發送請求時,如果你看到的HTTP請求頭中發送,它有點像 -

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

應用程序/ XML覆蓋在Tastypie資源的默認。因此,要麼你可以將瀏覽器標題設置爲'application/json'(壞主意),或者你只是在GET中指定。

如果您使用CURL命中相同的API網址,您將看到JSON輸出,但未指定GET。

9

由於tastypie 0.9.13的,如果你不需要XML的支持,你可以在全局設置TASTYPIE_DEFAULT_FORMATS禁用它只是['json']settings.py文件。然後,請求應該默認爲JSON。

+0

這很好,謝謝! – 2014-01-15 21:18:40

+0

其中一個我希望我可以給一個以上的☝️rec的東西。 – 2016-12-29 22:19:47

2

我已經測試了將TASTYPIE_DEFAULT_FORMATS設置爲['json'],但是它在瀏覽器中查看API時並不阻止「Sorry not implemented yet」消息。

上午能夠做出警告,迫使在中間件「接受」頭「應用/ JSON」走開:

class TastyJSONMiddleware(object): 
    """ 
    A Django middleware to make the Tastypie API always output in JSON format 
    instead of telling browsers that they haven't yet implemented text/html or 
    whatever. 

    WARNING: This includes a hardcoded url path for /api/. This is not 'DRY' 
    because it means you have to edit two places if you ever move your API 
    path. 
    """ 

    api_prefix = '/api/' 

    def process_request(self, request): 
     if request.path.startswith(self.api_prefix): 
      request.META['HTTP_ACCEPT'] = 'application/json'