Standardmäßig setzt die HTTP-Anforderung / Antwort der Django REST-Framework-Anwendung JSON voraus. JSON ist gut, aber Sie möchten MessagePack verwenden.
Um dies zu ändern, legen Sie Parser / Renderer fest.
Request --Parsers Antwort - Renderer
MessagePack wird standardmäßig nicht unterstützt, in der Dokumentation wird jedoch die Verwendung von djangorestframework-msgpack angegeben.
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
Installieren Sie djangorestframework-msgpack.
pip install djangorestframework-msgpack
Stellen Sie settings.py so ein, dass MessagePack verwendet wird.
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework_msgpack.parsers.MessagePackParser',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_msgpack.renderers.MessagePackRenderer',
),
}
Sie verwenden jetzt MessagePack.
Der Rest ist ein Bonus.
Ich verwende Django REST Swagger, weiß aber nicht, wie ich MessagePack verwenden soll.
Daher kann in der Umgebung, in der Swagger verwendet wird (hier, wenn DEBUG = True), auch JSON verwendet werden.
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',
),
}
Die Reihenfolge ist wichtig. Da die Oberseite die Hauptleitung ist, schreibe ich das Nachrichtenpaket als Hauptleitung.
BrowsableAPIRenderer ist für dies. Ich benutze es jetzt nicht, aber ich lege es hinein.
Schreiben Sie, um MessagePack beim Testen der Kommunikation zu verwenden. Es macht keinen Sinn, mit JSON zu testen.
import msgpack
from django.test import TestCase
class ApiUsersTestCase(TestCase):
def test_put_users_pk_ok(self):
"""
Zum Beispiel eine API, die Benutzerparameter festlegt
Da es sich um ein Bild handelt, handelt es sich nur um einen einfachen Test
"""
pk = 1
params = {
"name": "Trumpf"
}
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"])