Projet

Général

Profil

Development #52949

API, possibilité de définir un attribut du type "profile_image"

Ajouté par Frédéric Péters il y a environ 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
12 avril 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui ça n'est a priori pas possible, dans son formulaire d'édiiton DRF affiche uniquement la case à cocher "photo verified", pas le champ en lui-même, qui est visiblement forcé lecture-seule,

        'rest_framework_field_class': serializers.FileField,
        'rest_framework_field_kwargs': {
            'read_only': True,
            'use_url': True,
        },

Fichiers

Révisions associées

Révision c8c64b6a (diff)
Ajouté par Valentin Deniaud il y a presque 3 ans

api: allow changing profile image (#52949)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Actuellement l'API sert l'URL publique de l'image, ce n'est pas suffisant ?

PS: c'est vérifié par ce test https://git.entrouvert.org/authentic.git/tree/tests/test_attribute_kinds.py#n406

#3

Mis à jour par Frédéric Péters il y a environ 3 ans

Ok ticket visiblement pas assez clair, la demande est de pouvoir utiliser l'API pour modifier le contenu du champ.

#4

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Ok j'ai compris, le but c'est de pouvoir poser une image via l'API.

#5

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Donc à priori il faudrait développer un Field de sérialisation DRF particulier (https://www.django-rest-framework.org/api-guide/fields/#custom-fields) :
  • en lecture, faire comme actuellement servir l'URL (ou hériter de FileField qui fait déjà tout ça)
  • en écriture attendre une chaîne base64 la décoder et lui faire passer les contrôles appliqués en front (taille, format, etc..) avant de la sauvegarder
#6

Mis à jour par Marie Kuntz il y a environ 3 ans

Serait-il possible d'avoir un chiffrage pour ce dév ? y a-t-il besoin de mieux définir le périmètre ?

#8

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

1j.

#9

Mis à jour par Valentin Deniaud il y a presque 3 ans

  • Assigné à mis à Valentin Deniaud
#10

Mis à jour par Valentin Deniaud il y a presque 3 ans

Benjamin Dauvergne a écrit :

  • en écriture attendre une chaîne base64 la décoder et lui faire passer les contrôles appliqués en front (taille, format, etc..) avant de la sauvegarder

C'est vraiment nécessaire le base64 ? Sans ça le patch est d'une simplicité attirante (sinon le code à ajouter ressemblera à https://github.com/Hipo/drf-extra-fields/blob/master/drf_extra_fields/fields.py#L38).

#11

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Valentin Deniaud a écrit :

Benjamin Dauvergne a écrit :

  • en écriture attendre une chaîne base64 la décoder et lui faire passer les contrôles appliqués en front (taille, format, etc..) avant de la sauvegarder

C'est vraiment nécessaire le base64 ? Sans ça le patch est d'une simplicité attirante (sinon le code à ajouter ressemblera à https://github.com/Hipo/drf-extra-fields/blob/master/drf_extra_fields/fields.py#L38).

Je veux oui, mais quelle alternative a-t-on ? Sachant que serializers.FileField/ImageField ne fonctionnent pas en JSON (https://www.django-rest-framework.org/api-guide/fields/#file-upload-fields).

#12

Mis à jour par Valentin Deniaud il y a presque 3 ans

  • Statut changé de Solution proposée à En cours

Oui compris, nos API c'est du JSON, il ne faut pas faire autre chose. Je vais faire le truc base64.

#14

Mis à jour par Valentin Deniaud il y a presque 3 ans

Voilà avec support de base64, en permettant toujours un PUT normal.

#15

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée

Ok; si un jour on veut s'en servir depuis w.c.s. on reverra ça (ça ne correspond pas à la façon d'encoder les fichiers, là c'est du data URL avec une demi validation, t'aurais pu juste considérer que c'est du base64 sans chercher de préfixe je pense).

#16

Mis à jour par Valentin Deniaud il y a presque 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit c8c64b6abf4fba23032cf1b9073e74030dd7efed
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Mon Jul 19 15:37:17 2021 +0200

    api: allow changing profile image (#52949)
#17

Mis à jour par Valentin Deniaud il y a presque 3 ans

Benjamin Dauvergne a écrit :

Ok; si un jour on veut s'en servir depuis w.c.s. on reverra ça (ça ne correspond pas à la façon d'encoder les fichiers, là c'est du data URL avec une demi validation, t'aurais pu juste considérer que c'est du base64 sans chercher de préfixe je pense).

Ça supporte les deux, data URI et b64 seul, cf les tests.

#18

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Valentin Deniaud a écrit :

Benjamin Dauvergne a écrit :

Ok; si un jour on veut s'en servir depuis w.c.s. on reverra ça (ça ne correspond pas à la façon d'encoder les fichiers, là c'est du data URL avec une demi validation, t'aurais pu juste considérer que c'est du base64 sans chercher de préfixe je pense).

Ça supporte les deux, data URI et b64 seul, cf les tests.

Ok j'ai raté le 'if..base64' dans ma lecture un peu rapide.

#19

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF