Je cherche à désactiver la création automatique de session dans Django pour certaines URL. J'ai/api/* et chaque client qui frappe cela obtient une nouvelle session Django. Existe-t-il un moyen d'ignorer certaines URL?Désactiver la création de session dans Django
Répondre
Une solution triviale à ceci est de faire distinguer votre serveur web entre les appels d'API et les appels réguliers, puis d'avoir deux instances WSGI différentes de votre application: une avec des sessions activées, l'autre avec des sessions désactivées. (Ceci est probablement beaucoup plus facile avec Nginx qu'avec Apache.)
Une alternative est d'hériter de SessionMiddleware, puis de modifier les fonctions de processus pour ignorer toutes les demandes correspondant à vos critères. Quelque chose comme:
from django.contrib.sessions.middleware import SessionMiddleware
class MySessionMiddleware(SessionMiddleware):
def process_request(self, request):
if request.path_info[0:5] == '/api/':
return
super(MySessionMiddleware, self).process_request(request)
def process_response(self, request, response):
if request.path_info[0:5] == '/api/':
return response
return super(MySessionMiddleware, self).process_response(request, response)
Et puis modifiez votre fichier de paramètre afin que MIDDLEWARE_CLASSES contient le chemin « MySessionMiddleware » et non "django.contrib.sessions.middleware.SessionMiddleware.
J'ai repoussé la réponse acceptée, mais notez que vous pouvez également utiliser la méthode decorator_from_middleware pour activer sélectivement le middleware par vue. Voir les réponses de StackOverflow au Non-global middleware in Django pour plus de détails.
Il est également possible dans un middleware personnalisé, ou n'importe où ailleurs, de surcharger la méthode request.session.save
avant que la réponse ne soit traitée dans SessionMiddleware, où la méthode est appelée.
request.session.save = lambda: None
Trivial, fonctionne. L'avantage de cette approche, bien qu'il s'agisse d'un hack de facto, est que l'objet session est toujours accessible et peut être utilisé de la manière habituelle sans avoir besoin d'autres changements dans le code.
- 1. Expiration de la session Django?
- 2. utilisateur de session django
- 3. Comment tracer la création de session
- 4. désactiver un bloc dans django
- 5. set session utilisateur dans django
- 6. Comment désactiver la création de nouvelles lignes dans un DataGridView?
- 7. Délai d'expiration de la session django dans les 10 secondes
- 8. Vérifiez si la clé de session est définie dans Django
- 9. Django - Perdant Auth Session
- 10. Désactiver la saisie semi-automatique dans textfield dans Django?
- 11. Comment désactiver le cookie de session PHP?
- 12. Création de comptes d'utilisateurs temporaires - Django
- 13. Django - Démarrer la session par Ajax Demande
- 14. comment désactiver bulk_action dans django 1.1 beta
- 15. Comment désactiver la session en PHP Utilisation de Javascript?
- 16. Comment désactiver la création d'un dossier '.idea' dans Rubymine?
- 17. Création d'une session dans Rails Helper
- 18. Erreur lors de la création de la session Fluent NHibernate Session
- 19. Comment désactiver la redirection vers la page de connexion dans JBoss, lorsque la session expire?
- 20. Comment désactiver le cache de requête Django?
- 21. Élimination de certains appels de session Django
- 22. Création d'un écran d'ouverture de session
- 23. Désactiver l'annulation pour la création/suppression de NSManagedObject
- 24. accès session django d'un décorateur
- 25. Désactiver le processus de création d'espace de travail dans Eclipse
- 26. Empêcher la création d'une session de manière sélective
- 27. La session Django disparaît par intermittence juste après la connexion
- 28. Django ManyToManyField Création Problèmes
- 29. problème de session avec django + apache + mod_wsgi
- 30. Où réside la création des permissions dans Django?
Merci pour l'info. 1 mise en garde cependant. Si vous utilisez l'authentification django, le middleware de session est requis. Process_response doit également renvoyer la réponse. –
Cela ressemble à ce dont j'avais besoin. Un conseil: Utilisez 'if reqest.path_info.startswith ('/ api /')' au lieu de découper la chaîne. –
Est-ce que process_response ne doit pas renvoyer l'objet de réponse? def process_response (auto, demande, réponse): si request.path_info [0: 5] == '/ api /': réponse de retour super retour (MySessionMiddleware, auto) .process_response (demande, réponse) –