Django类视图在POST时返回空字符串
为了演示:
from django.views.generic.base import View
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
class TestView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return HttpResponse('haha')
urls.py 文件是
url(r'^test/', TestView.as_view()),
所以当你用 GET 请求时,你可以看到 haha
,但是当你用 POST 请求时却得到一个空白页面……
我这里漏掉了什么呢?
编辑:为了更清楚我在做什么。我正在写一个处理 JSON 数据的 CURD 视图,我需要以不同的方式解析 JSON。其中一种情况是,当有人用特定格式 POST 数据时,这个视图会调用视图内部的另一个方法并返回一些内容。但结果却什么都没返回。所以我给你们展示了一个最小的示例。请帮我看看我的代码哪里出问题了。谢谢!
顺便提一下 可能相关的问题
4 个回答
1
我知道这并没有直接回答你的问题,但可能会提供一个解决办法。在我使用JSON的应用中,当我想要通过get方法和post方法得到相同的结果时,我会把post请求发送到get方法。大概是这样的:
def get(self, request, *args, **kwargs):
return HttpResponse('Ha!')
def post(self. request, *args, **kwargs):
return self.get(request, *args, **kwargs)
这样就可以不动dispatch了。
5
你需要实现它的 post
方法。可以查看 基于类的视图。
from django.http import HttpResponse
from django.views.generic import View
class TestView(View):
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
# do something
return super(TestView, self).dispatch(*args, **kwargs)
def post(self, request, *args, **kwargs):
# do somthing
def get(self, request, *args, **kwargs):
return HttpResponse('Hello, World!')
想了解更多关于 dispatch
的内容,可以查看 文档。
默认的实现会检查HTTP请求的方法,然后尝试调用一个与这个方法匹配的函数;比如,GET请求会调用get(),POST请求会调用post(),依此类推。
所以之前你打乱了这个逻辑,调用 super
可以让 dispatch
正常调用post方法。
0
抱歉大家,这是uWSGI和nginx中的一个错误...
https://stackoverflow.com/a/11115108/41948
我真的很抱歉让你们浪费时间,因为我之前给你们带来了误导。其实我也花了一段时间才弄清楚我的技术栈中哪个部分出了问题。