[Django] Utiliser MessagePack avec le framework Django REST

Utiliser MessagePack avec le framework Django REST

La requête / réponse HTTP de l'application de framework Django REST suppose JSON par défaut. JSON est bon, mais vous souhaitez utiliser MessagePack.

Pour changer cela, définissez Analyseurs / Rendus.

Demande --Parsers Réponse --Renderers

MessagePack n'est pas pris en charge par défaut, mais la documentation dit d'utiliser djangorestframework-msgpack.

MessagePack is a fast, efficient binary serialization format.
Juan Riaza maintains the djangorestframework-msgpack package which provides MessagePack renderer and parser support for REST framework.

djangorestframework-msgpack

Installez djangorestframework-msgpack.

pip install djangorestframework-msgpack

Définissez setting.py pour utiliser MessagePack.

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_msgpack.parsers.MessagePackParser',
    ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework_msgpack.renderers.MessagePackRenderer',
    ),
}

Vous utilisez maintenant MessagePack.

Le reste est un bonus.

Utilisez également Django REST Swagger

J'utilise Django REST Swagger, mais je ne sais pas comment utiliser MessagePack.

Par conséquent, l'environnement qui utilise Swagger (ici, lorsque DEBUG = True) permet également d'utiliser JSON.

if DEBUG == True:
    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': (
            'rest_framework_msgpack.parsers.MessagePackParser',
            'rest_framework.parsers.JSONParser',
        ),
        'DEFAULT_RENDERER_CLASSES': (
            'rest_framework_msgpack.renderers.MessagePackRenderer',
            'rest_framework.renderers.JSONRenderer',
            'rest_framework.renderers.BrowsableAPIRenderer',
        ),
    }
else:
    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': (
            'rest_framework_msgpack.parsers.MessagePackParser',
        ),
        'DEFAULT_RENDERER_CLASSES': (
            'rest_framework_msgpack.renderers.MessagePackRenderer',
        ),
    }

L'ordre est important. Puisque le haut est le principal, j'écrirai le pack de messages comme principal.

BrowsableAPIRenderer est pour ceci. Je ne l'utilise pas maintenant, mais je l'ai mis.

Le test de communication est effectué avec MessagePack

Écrivez pour utiliser MessagePack lors du test de la communication. Cela n'a pas de sens de tester avec JSON.

import msgpack

from django.test import TestCase

class ApiUsersTestCase(TestCase):
    def test_put_users_pk_ok(self):
        """
Par exemple, une API qui définit les paramètres utilisateur
Puisqu'il s'agit d'une image, seul un simple test
        """
        
        pk = 1
        params = {
            "name": "Atout"
        }

        response = self.client.put("/users/{0}/".format(pk), msgpack.packb(params, use_bin_type=True), "application/msgpack")
        self.assertEqual(response.status_code, 201)
        
        content = msgpack.unpackb(response.content, encoding='utf-8')
        self.assertEqual(content["name"], params["name"])

Recommended Posts

[Django] Utiliser MessagePack avec le framework Django REST
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
Créer une API RESTful avec Django Rest Framework
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
Utiliser Gentelella avec Django
Bases du framework Django REST
Utilisez LESS avec Django
Utiliser MySQL avec Django
Astuces Django Rest Framework
CRUD PUT, DELETE avec Nuxt & Django REST Framework
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Bloc d'achoppement du framework Django REST
Utilisez prefetch_related commodément avec Django
Créer une application Todo avec Django REST Framework + Angular
Lorsque vous souhaitez filtrer avec le framework Django REST
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Utiliser les pictogrammes Unicode 6.0 avec django / MySQL
Implémentation de CRUD à l'aide de l'API REST avec Python + Django Rest framework + igGrid
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Suppression logique dans Django, DRF (Django REST Framework)
Comprendre la commodité de Django Rest Framework
Un outil administratif qui peut être créé immédiatement avec le framework ng-admin + Django REST
Notes diverses sur le framework Django REST
Django REST Framework + Considération de conception d'architecture propre
Implémentation de la fonction d'authentification du modèle utilisateur personnalisé dans Django REST Framework à l'aide de djoser
Internationalisation avec Django
CRUD avec Django
Comment gérer les caractères déformés dans json de Django REST Framework
Utiliser des packages Python supplémentaires avec Serverless Framework (v1.x)
Framework Django REST Un peu utile à savoir.
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Utilisez Python / Django avec Windows Azure Cloud Service!
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers avec Django
Résumé du développement avec Django
Utilisez RTX 3090 avec PyTorch
Utiliser ansible avec cygwin
Framework Web Django Python
Utiliser pipdeptree avec virtualenv
Sortie PDF avec Django
[Python] Utiliser JSON avec Python
Utilisez Mock avec pytest
Sortie Markdown avec Django
Twitter OAuth avec Django
Utiliser tensorboard avec Chainer
Utiliser DynamoDB avec Python
Utiliser pip avec MSYS2
Premiers pas avec Django 1
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)
List, méthode pour les ressources imbriquées dans le framework Django REST
Implémentez l'API à une vitesse explosive en utilisant Django REST Framework
Utilisez Python 3.8 avec Anaconda
Utiliser les droits d'auteur avec Spacemacs
Téléchargement de fichiers avec django
Utiliser python avec docker
[Django Rest Framework] Personnalisez la fonction de filtre à l'aide de Django-Filter
La mutualisation mécanise avec Django