我正在使用django tastypie来创建我的休息端点。所以现在是时候制作登录端点了(它尚未完成)。
帐户/ API / resources.py
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
allowed_methods = ['post']
serializer = Serializer(formats=['json'])
def prepend_urls(self, *args, **kwargs):
return [
url(r'^(?P<resource_name>%s)/login/$' % self._meta.resource_name,
self.wrap_view('dispatch_login'), name='api_dispatch_login')
]
def dispatch_login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self._meta.serializer.from_json(request.body) # This raises the exception.
return self.create_response(request, {}, status=200)
帐户/ tests.py
class UserApiTestCase(TestCase):
def setUp(self):
self.uri = reverse('api_dispatch_login', kwargs={'api_name': 'v1',
'resource_name': 'user'})
def test_login_user_credentials_sent_in_body_request(self):
with self.assertRaises(BadRequest):
self.client.post(self.uri, content_type='application/json')
通过使用终端模拟器和curl来使用Web服务,我可以看到异常被引发。
$ curl localhost:8000/api/v1/user/login/ --request POST
{"error": "Request is not valid JSON."}
但是在运行测试时,断言失败了。
FAIL: test_login_user_credentials_sent_in_body_request (accounts.tests.UserApiTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/slackmart/code/superproject/accounts/tests.py", line 29, in test_login_user_credentials_sent_in_body_request
self.client.post(self.uri, content_type='application/json')
AssertionError: BadRequest not raised
答案 0 :(得分:0)
https://github.com/django-tastypie/django-tastypie/blob/master/docs/release_notes/dev.rst
添加了UnsupportedSerializationFormat和 不受支持的DeserializationFormat异常,被捕获和 导致HttpNotAcceptable(406 status)和HttpUnsupportedMediaType (415状态)响应,分别。以前这些相同的类型 错误已经出现400 BadRequest错误。
最近对Tastypie进行了更改,使其更符合HTTP标准,错误代码更具体。您需要查找406或415状态代码而不是400。