Désolé si c'est une question banale, mais j'ai cherché un certain temps et je n'ai pas pu trouver une bonne implémentation.
Quelqu'un peut-il fournir un exemple de la façon d'implémenter une vue post-only (qui peut gérer les téléchargements de fichiers) dans Django en sous-classant l'une des vues génériques?
Je veux créer un point de terminaison qui gère toute la logique de création de commentaire de billet de blog. Le formulaire de commentaire est intégré sur ma page de blog et donc, ces données seront envoyées à l'url sous la forme POST
.
La classe View
a un http_method_names
attribut qui répertorie les méthodes HTTP acceptées par la vue.
Par conséquent, vous pouvez sous-classer n'importe quelle vue générique de votre choix (par exemple, CreateView
) et définir http_method_names
afin que seules les demandes POST soient autorisées.
from Django.views.generic.edit import CreateView
class CommentCreateView(CreateView):
http_method_names = ['post']
model = Comment
...
Vous pouvez également sous-classer View
et écrire votre propre méthode de publication.
class CommentView(View):
def post(self, request):
...
Dans ce cas, les requêtes GET renverront une réponse HttpResponseNotAllowed
, car vous n'avez pas défini de méthode get
pour gérer les requêtes GET.
Vous pouvez essayer quelque chose comme:
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)
De la docs :
dispatch examine la demande pour déterminer s'il s'agit d'un GET, POST, etc., et relaie la demande vers une méthode de correspondance si l'une est définie , ou déclenche HttpResponseNotAllowed
Donc, essentiellement, toute vue basée sur une classe que vous créez dans laquelle vous ne définissez qu'une méthode POST
, n'autorisera qu'une demande POST.
Je suppose que quelque chose comme ça devrait fonctionner:
class TestView(View):
def post(self, request):
return HttpResponse('This is a post only view')
Vous pouvez également le faire en utilisant un CreateAPIView si vous utilisez Django Rest Framework http://www.Django-rest-framework.org/api-guide/generic-views/ #createapiview
Utilisé pour les points de terminaison de création uniquement.
Fournit un gestionnaire de méthode de publication.