是TastyPie的新手。我有一个非常简单的资源,并按以下方式覆盖obj_create方法。
Ajax Call: -
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。我该如何调试此问题?
答案 0 :(得分:1)
您可以使用Python调试器。 (http://docs.python.org/library/pdb.html)
找到你的tastypie副本(可能在你的virtualenv中),打开文件 resources.py 并找到方法* post_list *。这是在向Django发送对list-resource URL的POST请求时调用的方法。
你会在那个方法的某个地方找到对* obj_create *的调用。现在,您可以通过添加以下行来设置断点:
import pdb
pdb.set_trace()
在那个方法中。也许作为第一个声明。
现在,当你启动你的devserver并发出你的ajax-call时,执行应该停在set_trace()处,你应该在shell中看到你启动了devserver的python提示符。
现在您可以探索请求的运行时环境。例如,您可以通过在提示符下输入来检查局部变量 您可以通过键入“ l ”(小L)查看您所使用方法的列表,使用“ n ”执行下一行,然后单步执行'<强>取值强>'。
这可以帮助您了解正在发生的事情。花点时间学习如何使用pdb,这非常值得。
有关pdb和django的更多信息,请参阅:
http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
答案 1 :(得分: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)