Je veux restreindre l'accès à une vue particulière de sorte que seules les requêtes AJAX sont acceptées, donc je mis en œuvre le décorateur suivant:Django: décorateur en vue à partir de la classe
def require_ajax(func):
def decorator(func):
def inner(request, *args, **kwargs):
if not request.is_ajax():
return HttpResponseBadRequest()
return func(request, *args, **kwargs)
return inner
return decorator
Cela fonctionne parfaitement dans les vues de la fonction, mais je ne peut pas comprendre comment l'utiliser dans les vues basées sur les classes. J'ai essayé this mais j'ai eu des erreurs, je suppose en raison de l'ancienne version de Django que j'utilise.
Et bien, mon point de vue basé sur les classes:
class AjaxView(TemplateView):
template_name = '...'
def get_context_data(self, **kwargs):
...
return context
@method_decorator(require_ajax)
def dispatch(self, *args, **kwargs):
return super(AjaxView, self).dispatch(*args, **kwargs)
Quelles erreurs exactement? Je ne peux pas vraiment vous aider sans connaître le problème. L'utilisation de la méthode 'method_decorator' est une approche correcte, mais vous voudrez peut-être consulter la documentation de cette méthode sous Django 1.4. https://django.readthedocs.io/fr/1.4/topics/class-based-views.html?highlight=method_decorator#decorating-the-class – makaveli
Vous aurez besoin de faire un mixin pour CBV - De la même manière 'login_required 'et' LoginRequiredMixin' fonctionnent – Sayse
@makaveli l'erreur est à peu près le kwargs, il dit qu'il y a des kwargs inattendues (que j'utilise dans 'get_context_data'). – dabadaba