基于django类的视图在POST时返回空字符串

est*_*est 0 python django post django-views django-class-based-views

示范:

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')
Run Code Online (Sandbox Code Playgroud)

urls.py是

url(r'^test/', TestView.as_view()),
Run Code Online (Sandbox Code Playgroud)

所以当GET你可以看到haha,但在POST时你会得到一个空白页...

我在这里错过了什么?

编辑:澄清我在做什么.我正在编写一个JSON流CURD视图,我需要以各种方式解析JSON.其中之一是当ppl POST数据具有某种模式时,视图将调度到视图内的另一个方法并返回一些东西.但结果却没有回报.所以我告诉你最小的PoC.请帮我解决我的代码错误.TIA!

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

Ahs*_*san 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!')
Run Code Online (Sandbox Code Playgroud)

查看更多dispatch 文档.

默认实现将检查HTTP方法并尝试委托给与HTTP方法匹配的方法; 一个GET将被委托给get(),一个POST到post(),依此类推.

所以以前你打扰了上面的逻辑,调用super将允许dispatch委托post方法.