Django类基于post-only视图

时间:2016-04-26 08:39:10

标签: django django-views django-class-based-views

很抱歉,如果这是一个微不足道的问题,但我已经搜索了很长时间,并且无法找到一个好的实现。

有人可以通过继承任何通用视图来提供如何在Django中实现仅后视图(可以处理文件上传)的示例吗?

我想创建一个处理所有博客帖子评论创建逻辑的端点。评论表单嵌入在我的博客页面中,因此,这些数据将作为POST发送到网址。

4 个答案:

答案 0 :(得分:21)

self.navigationController?.popViewControllerAnimated(true) 类有一个http_method_names属性,列出了视图将接受的HTTP方法。

因此,您可以子类化您喜欢的任何通用视图(例如,CreateView),并设置View以便只允许POST请求。

http_method_names

或者,您可以继承from django.views.generic.edit import CreateView class CommentCreateView(CreateView): http_method_names = ['post'] model = Comment ... ,并编写自己的post方法。

View

在这种情况下,GET请求将返回class CommentView(View): def post(self, request): ... 响应,因为您尚未定义HttpResponseNotAllowed方法来处理GET请求。

答案 1 :(得分:5)

您可以尝试以下方式:

class MyView(TemplateView):
    template_name = 'my_template.html'

    def post(self, request, **kwargs):
        my_data = request.POST
        # do something with your data
        context = {}  #  set your context
        return super(TemplateView, self).render_to_response(context)

答案 2 :(得分:3)

来自docs

  

dispatch查看请求以确定它是否为GET,POST等,并将请求中继到匹配方法如果已定义,或者引发HttpResponseNotAllowed

基本上,您创建的任何基于类的视图(仅定义POST方法)只允许POST请求。

答案 3 :(得分:0)

我想这样的事情应该有效:

class TestView(View):

    def post(self, request):
        return HttpResponse('This is a post only view')

如果使用Django Rest Framework,也可以使用CreateAPIView来完成此操作 http://www.django-rest-framework.org/api-guide/generic-views/#createapiview

  

用于仅限创建的端点。

     

提供post方法处理程序。