Django: Stocker et lire des fichiers sur Amazon S3 en 8 tapes
Si vous dsirez plus de contenu francophone comme celui-ci, cliquer Follow ou suivez-moi sur Twitter
Comment utiliser le service S3 de Amazon afin de stoker et lire des fichiers et des images ?
tape 0:
Avoir un project Django dj crer dans lequel vous aimeriez ajouter la possibilit d'envoyer des fichiers et des images sur Amazon S3 et de les lires par la suite
tape 1
Crer un compte Amazon S3 (https://aws.amazon.com/fr/s3/) et crer un nouveau bucket lors de la cration du bucket, vous pouvez utiliser les valeurs par dfaut sauf pour la scurit s'assurer que 'Block all public access' n'est PAS coch.
Attention, ne pas mettre de fichiers avec informations sensible dans ce bucket car il est ouvert pour lecture tous le web!
tape 2
Une fois le bucket cr, ouvrir le bucket et aller l'onglet
'Permissions'.
Dans la section 'Bucket Policy' cliquez sur 'Edit' et ajouter ce code et ensuite cliquez sur 'Save changes'
{ "Version": "2012-10-17", "Id": "Policy1623584629734", "Statement": [ { "Sid": "Stmt1623584623637", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } ]}
tape 3
Utiliser le service S3 partir de votre application Django.
Pour ce faire nous allons installer le package Django Storages et Boto3.
Django Storages permet de se connecter diffrent systme de storage comme Amazon S3, Dropbox, Digital Ocean, Google Cloud, etc.
Boto3 est le SDK Python pour se connecter Amazon S3
Dans ce tutoriel nous n'allons pas utiliser directement Boto3. C'est Django Storages qui s'en occupe pour nous.
$ pip install django-storages$ pip install boto3
tape 4
Vous devez modifier votre fichier settings.py et y inclure les lignes suivantes
# aws settingsAWS_ACCESS_KEY_ID = '...'AWS_SECRET_ACCESS_KEY = '...'AWS_STORAGE_BUCKET_NAME = '...'AWS_QUERYSTRING_AUTH = FalseAWS_S3_FILE_OVERWRITE = FalseAWS_DEFAULT_ACL = NoneDEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Les AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY sont disponible dans la console de S3 en cliquant sur l'option 'My Security Credentials' dans le menu portant votre nom d'usager. (Situ en haut droite)
Une fois sur la page de 'Your Security Credentials' click sur Access Keys et crer une nouvelle cl. Le ID et le secret vous seront donn.
tape 5
Vous pouvez maintenant stocker des fichiers sur Amazon S3
Pour faire le upload d'images par exemple vous pouvez crer un model avec un champ ImageField
from django.db import modelsclass Product(models.Model): name = models.CharField(max_length=200) description = models.TextField(blank=True, null=True) image = models.ImageField()
Ensuite faire la migration et l'excuter
$ python mange.py makemigrations$ python mange.py migrate
Ajouter ce modle l'Admin Panel
# admin.pyfrom django.contrib import adminfrom .models import Productadmin.site.register(Product)
Si vous n'avez pas encore de superuser pour accder l'Admin Panel vous pouvez en crer un
python manage.py createsuperuser
tape 6
Vous pouvez maintenant aller dans l'Admin Panel (localhost:8000/admin), faire votre login, cliquez sur Product et ajouter un Product. L'image que vous aller choisir en cliquant sur 'Choose File' sera automatiquement envoy dans votre bucket sur Amazon S3. (L'upload s'effectue lors de la creation du Product)
tape 7
Vous pouvez maintenant lire les fichiers stocks sur votre Amazon S3
Par exemple pour afficher une image dans une template. Vous pouvez utiliser la proprit .url de votre champ image
<img src="{{ product.image.url }}" />
tape 8
Il est galement possible d'utiliser Amazon S3 pour stocker tous vos fichiers static de votre projet. Par exemple les fichiers css, js et images.
Pour ce faire vous devez ajouter cette ligne de code settings.py
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Ce code indique Django que vos fichiers static sont maintenant stock sur Amazon S3.
Si vous relancer votre application (python manage.py runserver) vous remarquerez que votre application ne fonctionnera pas comme il faut car vos fichiers statics ne sont pas encore dans votre Amazon S3.
Pour les envoyers vous devez excuter la commande:
python manage.py collectstatic
Django va donc envoyer tous vos static dans votre bucket S3
Si vous relancez l'application tout devrait tre redevenu normal.
Si vous dsirez plus de contenu francophone comme celui-ci, cliquer Follow ou suivez-moi sur Twitter
Original Link: https://dev.to/ericlecodeur/django-stocker-et-lire-des-fichiers-sur-amazon-s3-en-8-etapes-3gnh
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To