2012-07-25 64 views
4

我在使用tastypie並向其發佈數據時遇到問題。我只能夠檢索401錯誤代碼。tastypie發帖驗證問題

爲了澄清,我能夠成功從tastypie api中檢索數據。

附件是代碼片段,也許有人可以幫助我擺脫這種情況。 在我開始之前,有一點背景:我正在使用自定義授權類。

class CustomAuthorization(Authorization): 
     def is_authorized(self, request, object=None): 
      if request.user.username == 'custom_user': 
       return True 
      return False 

下面是實際的資源:

class CustomObjectResource(ModelResource): 
     class Meta: 
      queryset = CustomObject.objects.all() 
      authentication = ApiKeyAuthentication() 
      authorization = CustomAuthorization() 
      list_allowed_methods = ['get', 'post', ] 
      detail_allowed_methods = ['get', 'post', 'put'] 
      include_resource_uri = False 
      resource_name = 'customobject' 
      always_return_data = True 


     def obj_create(self, bundle, request=None, **kwargs): 
      try: 
       print "request" 
      except: 
       raise BadRequest('I couldnt save your information.') 
      return True 

我知道obj_create方法是假的,但它仍然應該叫,做一些事情,或者是這已經是問題?

以下curl命令用於將數據發佈到tastypie API。

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"body": "This will prbbly be my lst post.", "pub_date": "2011-05-22T00:46:38", "slug": "another-post", "title": "Another Post"}' http://local.com:8000/api/v1/customobject/?format=json&username=custom_user&api_key=123456789

api_key是正確的,但在這種情況下是假的!

如前所述,獲取方法的工作原理,但職位只是不會工作。

任何人都有關於如何解決這個問題或有一個解決方法的想法?

回答

1

我會嘗試一些事情來調試這個問題。

1)嘗試添加:allowed_methods = ['get', 'post', 'put']

2)由於request.user.username是不同的添加打印語句在custom_authorization檢查是否導致該問題。

3)做(2)APIKeyAuthentication的源頭。

這應該足以讓您調試問題。 記得刪除打印報表一旦完成!

祝你好運。

+0

爲什麼不恰當地使用記錄模塊?它具有實際「打印」信息的能力,或根據日誌記錄配置執行其他任何操作(例如,在生產環境中完全忽略調試日誌記錄,但保留更高級別的日誌記錄)。 – Tadeck 2012-07-26 02:33:04

+0

當然,這就是我使用的。但是如果這個人需要快速調試而不需要進行設置,他可以使用打印語句 – nknj 2012-07-26 02:50:46

+0

感謝您的輸入。它實際上比這更令人困惑。正如所建議的那樣,我在允許的方法中添加了「put」,但它仍然不起作用。我使用身份驗證和授權層進行了更多的工作。我固定這兩個,現在它的工作。 – Wurzelgogerer 2012-08-03 18:18:41

0

這可能是由於已知的issue。在此刻的背景tastypie將POST轉換爲PUT,而Nikunj自從在list_allowed_methods中指出您沒有PUT POST也被阻止了......不確定是否存在這種情況,因爲在這種情況下您應該得到不允許的方法。我會建議在「is_authorized」方法中調試,並檢查那裏發生了什麼。