0

TastyPie の初心者です。私は非常に単純なリソースを持っており、次の方法で obj_create メソッドをオーバーライドしています。

Ajax 呼び出し :-

 var data2 ={
                  "crave": data1,
                  "uid": "100",
                  "access_token": "AAA"                     
              };                                                   
              $.ajax({
                  url: "http://localhost:8000/restapi/v1/icrave/",
                  type: 'POST',                     
                  data: data2,
                  contentType: 'application/json',
                  dataType: 'json',
                  success: function (res) {
                      console.log(res);
                  },
              });

リソースで

class IcravesResource(ModelResource): 
person = fields.ForeignKey(UserResource, 'person')
class Meta:

    queryset = Icrave.objects.filter(anonymous_or_not = False,is_active = True).order_by('-datetime')
    resource_name = "icrave" 
    allowed_methods = ['get','post']
    authentication =  GetAuthentication()     
    authorization = GetAuthorization()      

def obj_create(self,bundle,request=None, **kwargs):                
        print "Check if code reached here !!!"

        return super( IcravesResource, self ).obj_create( self, bundle, request, **kwargs )

コードがここまで来ていません。私は何を間違っていますか?認証と認証を確認しましたが、どちらも true を返しています。この問題をデバッグするにはどうすればよいですか?

4

2 に答える 2

1

Python Debugger を使用できます。( http://docs.python.org/library/pdb.html )

Tastypie のコピー (おそらく仮想環境内)を見つけ、 resources.pyファイルを開き、メソッド *post_list* を見つけます。これは、リスト リソース URL への POST リクエストが Django に送信されたときに呼び出されるメソッドです。

そのメソッドのどこかに *obj_create* の呼び出しがあります。次の行を追加して、ブレークポイントを設定できます。

import pdb
pdb.set_trace()

その方法で。多分最初の声明として。

ここで、devserver を起動して ajax-call を発行すると、set_trace() で実行が停止し、devserver を起動したシェルに python プロンプトが表示されます。

これで、リクエストのランタイム環境を調べることができます。たとえば、ローカル変数をプロンプトに入力して調べることができます。' l ' (小さな L) を入力し、' n ' で次の行を実行し、' s 'で関数にステップ
インすると、現在のメソッドのリストを表示できます。

これは、何が起こっているのかを理解するのに役立ちます。pdb の使用方法を学ぶのに時間がかかります。それだけの価値があります。

pdb と django の詳細については、次を参照してください。

http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/

于 2012-10-22T13:14:13.590 に答える
0

サーバー ログに基づいて、サーバーが実際に POST 要求を受け取ったことを確認できますか?

その場合は、次のように入力して、許可されたメソッド リストを指定することもできます。

list_allowed_methods = ['post', 'get']

一般的なものの代わりにallowed_methods

これは私のために働いたコードスニペットです:

class EntryDetailsResource(CommonResource):

    class Meta:
        queryset = Entry.objects.all()
        detail_allowed_methods = ['put','get','delete']
        list_allowed_methods = ['post', 'get']
        authorization = DjangoAuthorization()
        validation = EntryDetailsValidation()

    def obj_create(self, bundle, request=None, **kwargs):
        import sys
        print sys.stderr, 'aa'
        return super(CommonResource, self).obj_create(bundle, request, user=request.user)
于 2012-10-23T09:29:29.273 に答える