0

演示:

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。其中之一是当 ppl POST 具有特定模式的数据时,视图将分派到视图内的另一个方法并返回一些东西。但事实证明什么都没有返回。因此,我向您介绍了最小的 PoC。请帮助我我的代码出了什么问题。蒂亚!

顺便说一句可能的相关问题

4

4 回答 4

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 方法并尝试委托给与 HTTP 方法匹配的方法;GET 将委托给 get(),POST 委托给 post(),依此类推。

所以以前你在扰乱上述逻辑,调用super将允许dispatch委托发布方法。

于 2013-03-13T11:44:42.653 回答
1

我知道这并不能真正回答您的问题,但它可能会提供一种解决方法。我在 JSON 应用程序中使用的是当我想要两者的结果相同时向 get 方法发送一个帖子。就像是:

def get(self, request, *args, **kwargs):
    return HttpResponse('Ha!')

def post(self. request, *args, **kwargs):
    return self.get(request, *args, **kwargs)

调度独自一人。

于 2013-03-17T01:45:36.710 回答
0

使用基于类的视图时最好的方法是不要从头开始编写自己的方法处理程序;相反,使用一个通用类作为基础,然后只修改处理您需要的方法。例如,如果您有一个需要通过 POST 提交的表单,您应该使用FormView作为基础,它处理 GET 和 POST 请求的响应。

您不需要自己重写post()和/或get()方法;而是用于form_valid()定义提交表单时发生的情况:

class TestView(FormView):
    form_class = MyForm
    success_url = "/your/return/url/"
    def form_valid(self, form):
        # do something
        return redirect(self.get_success_url())
于 2013-03-14T13:21:00.373 回答
0

抱歉,这是 uWSGI 和 nginx 中的错误...

https://stackoverflow.com/a/11115108/41948

我真的很抱歉误导你浪费你的时间。我仍然花了一段时间才弄清楚我的堆栈的哪一部分出了问题。

于 2013-03-18T01:01:56.477 回答