2016-04-26 82 views
4

对不起,如果这是一个微不足道的问题,但我一直在寻找相当一段时间,并一直无法找到一个好的实现。Django基于邮件的视图

有人可以提供一个例子,说明如何在Django中通过子类化任何通用视图来实现仅后置视图(可以处理文件上传)?

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

+2

你能解释为什么downvote?据我所知,没有任何这样的问题/博客文章可用 – sudshekhar

回答

11

View类具有http_method_names属性,该属性列出视图将接受的HTTP方法。

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

from django.views.generic.edit import CreateView 


class CommentCreateView(CreateView): 
    http_method_names = ['post'] 
    model = Comment 
    ... 

或者,你可以继承View,写你自己的POST方法。

class CommentView(View): 

    def post(self, request): 
     ... 

在这种情况下,GET请求将返回一个HttpResponseNotAllowed回应,因为你没有定义get方法来处理GET请求。

0

我想这样的事情应该工作:

class TestView(View): 

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

您可以通过使用CreateAPIView如果你使用Django的REST框架 http://www.django-rest-framework.org/api-guide/generic-views/#createapiview

用于创建,只有端点也做到这一点。

提供一个post方法处理程序。

+1

这假定正在使用DRF – Sayse

+1

我猜测必须有方法可以自己做到这一点。我正在使用正常的意见。对一个特定视图使用DRF似乎是一种矫枉过正。 – sudshekhar

+0

@Sayse是的,它假定使用了DRF。我编辑了答案 –

3

你可以尝试这样的:

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) 
+0

我用它来避免在具有批量函数(删除,归档)的表中使用formset。更简单,更清洁。 –

2

docs

派遣查看请求,以确定它是否是一个GET,POST等,并请求中继匹配方法如果一个被定义为,或者引发HttpResponseNotAllowed

因此,基本上,您创建的任何基于类的视图只能定义一个POST方法,只会允许POST请求。

相关问题