对不起,如果这是一个微不足道的问题,但我一直在寻找相当一段时间,并一直无法找到一个好的实现。Django基于邮件的视图
有人可以提供一个例子,说明如何在Django中通过子类化任何通用视图来实现仅后置视图(可以处理文件上传)?
我想创建一个处理所有博客帖子评论创建逻辑的端点。评论表单嵌入在我的博客页面上,因此,这些数据将作为POST
发送到网址。
对不起,如果这是一个微不足道的问题,但我一直在寻找相当一段时间,并一直无法找到一个好的实现。Django基于邮件的视图
有人可以提供一个例子,说明如何在Django中通过子类化任何通用视图来实现仅后置视图(可以处理文件上传)?
我想创建一个处理所有博客帖子评论创建逻辑的端点。评论表单嵌入在我的博客页面上,因此,这些数据将作为POST
发送到网址。
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请求。
我想这样的事情应该工作:
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方法处理程序。
这假定正在使用DRF – Sayse
我猜测必须有方法可以自己做到这一点。我正在使用正常的意见。对一个特定视图使用DRF似乎是一种矫枉过正。 – sudshekhar
@Sayse是的,它假定使用了DRF。我编辑了答案 –
你可以尝试这样的:
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)
我用它来避免在具有批量函数(删除,归档)的表中使用formset。更简单,更清洁。 –
从docs:
派遣查看请求,以确定它是否是一个GET,POST等,并请求中继匹配方法如果一个被定义为,或者引发HttpResponseNotAllowed
因此,基本上,您创建的任何基于类的视图只能定义一个POST
方法,只会允许POST请求。
你能解释为什么downvote?据我所知,没有任何这样的问题/博客文章可用 – sudshekhar