Il me semble que la méthode que vous avez décrite dans votre code devrait fonctionner. Ce n'est vraiment pas différent de toute autre ressource protégée: vos vues peuvent servir des fichiers à partir de disques, d'enregistrements de bases de données, de modèles rendus ou de n'importe quoi. Tout comme le décorateur login_required empêche tout accès non autorisé à d'autres vues, il empêchera un tel accès à votre vue de servir de support protégé.
Ai-je raté quelque chose de votre question ici? S'il vous plaît clarifier si c'est le cas.
EDIT: En ce qui concerne le lien doc django dans votre commentaire: c'est la méthode pour simplement servir n'importe quel fichier de requête d'un répertoire particulier. Ainsi, dans cet exemple, les URL /site_media/foo.jpg
, /site_media/somefolder/bar.jpg
rechercheront automatiquement les fichiers foo.jpg
et somefolder/bar.jpg
sous document_root
. Fondamentalement, tout sous document_root
sera publiquement disponible. C'est évidemment peu sûr. Donc vous évitez cela avec votre méthode. Il est également considéré comme inefficace car django ne fait qu'ajouter beaucoup de frais inutiles quand tout ce dont vous avez besoin est quelque chose comme Apache pour prendre une requête d'URL et la mapper à un fichier sur le disque dur. (Vous n'avez pas besoin de sessions django, de traitement des demandes, etc.)
Dans votre cas, cela peut ne pas être si important. D'abord, vous avez sécurisé la vue. Deuxièmement, cela dépend de vos habitudes d'utilisation. Combien de demandes anticipez-vous pour ces fichiers? Vous n'utilisez que django pour l'authentification - cela justifie-t-il d'autres frais généraux? Si ce n'est pas le cas, vous pouvez envisager de traiter ces fichiers avec Apache et d'utiliser un fournisseur d'authentification. Pour en savoir plus, consultez la mod_wsgi
documentation:
Il existe des mécanismes similaires disponibles sous mod_python
Je crois. (Mise à jour: il suffit de remarquer l'autre réponse S'il vous plaît voir la réponse d'André pour la méthode mod_python
..)
EDIT 2: En ce qui concerne le code pour servir un fichier, s'il vous plaît voir cet extrait:
Vous devrez changer le content_type
en fonction du type de fichier que vous envoyez (pdf, jpg, etc).
Hey Ars, j'aurais dû clarifier que j'essaie de médiatiser la préoccupation suivante des docs django: http://docs.djangoproject.com/fr/dev/howto/static-files/#the-big -fat-disclaimer Si cette ligne de pseudo-code est valide, comment l'accomplissez-vous? # si connecté, servir "nom de fichier" d'Apache Merci! -Tom – TomFuertes
Got it; juste mis à jour la réponse. J'espère que cela t'aides. – ars