2011-12-27 26 views

Trả lời

38

Từ tastypie cookbook, để thay đổi định dạng mặc định, bạn cần phải ghi đè phương pháp determine_format() trên ModelResource của bạn:

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

Liên kết ở trên cho thấy phương pháp thay thế để xác định định dạng đầu ra.

Ngoài ra, tôi không nghĩ câu trả lời hợp lệ về bản chất là "Bạn không cần điều này".

Sửa

Có vẻ câu trả lời GregM là lẽ (tôi đã không kiểm tra nó) đúng nhất với phiên bản mới của TastyPie, as per documentation đặt sau trong settings.py của bạn sẽ hạn chế đầu ra tuần tự để json.

TASTYPIE_DEFAULT_FORMATS = ['json'] 
+3

'quy tắc TASTYPIE_DEFAULT_FORMATS'! – ducin

+0

+1 Đây phải là câu trả lời được chấp nhận! – slackmart

+0

Điều gì xảy ra nếu bạn muốn JSON là mặc định, mà còn hỗ trợ XML nếu được yêu cầu? – Richard

1

Kiểm tra/kiểm tra REST API của bạn, sử dụng một khách hàng nghỉ ngơi thay vì một trình duyệt, tốt nhất là biết cách khá in JSON. Tôi sử dụng plugin Postman cho Google Chrome.

Nếu bạn muốn json khá trong dòng lệnh:

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

Tasytpie có giá trị mặc định thiết lập như là 'application/json'. Nhưng điều đó bị ghi đè bởi yêu cầu Trình duyệt.

Theo Tastypie, mặc định là ghi đè bởi Tiêu đề yêu cầu CHẤP NHẬN và đặc điểm kỹ thuật định dạng của bạn trong GET tức. ? Format = json. Khi bạn gửi yêu cầu từ trình duyệt, nếu bạn thấy các yêu cầu HTTP Header gửi đi, một cái gì đó của nó như thế nào -

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

Các application/xml ghi đè mặc định trong Tastypie Resource. Do đó, bạn có thể đặt Tiêu đề trình duyệt để có 'ứng dụng/json' (ý tưởng tồi) hoặc bạn chỉ định trong GET.

Nếu bạn nhấn cùng một url API bằng cách sử dụng CURL, bạn sẽ thấy đầu ra JSON mà không chỉ định rằng trong GET.

9

Tính đến tastypie 0.9.13, nếu bạn không cần sự hỗ trợ XML, bạn có thể vô hiệu hóa nó trên toàn cầu bằng cách thiết lập TASTYPIE_DEFAULT_FORMATS chỉ ['json'] trong tập tin settings.py của bạn. Yêu cầu sau đó sẽ mặc định thành JSON.

+0

Điều này hoạt động tuyệt vời, cảm ơn! –

+0

Một trong những thời điểm tôi muốn tôi có thể cung cấp nhiều hơn một lần cho một điều. –

2

Tôi đã thử nghiệm đặt TASTYPIE_DEFAULT_FORMATS thành ['json'] nhưng không ngăn thông báo "Xin lỗi chưa triển khai" khi xem API từ trình duyệt.

tôi am thể đưa ra cảnh báo rằng đi bằng cách buộc "Chấp nhận" tiêu đề để 'application/json' trong một middleware:

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' 
Các vấn đề liên quan