Introduction à Python Django (6)

Créer une API pour smartphone

Jusqu'à présent, nous avons vu un exemple d'application Web qui renvoie une réponse HTML.

Ensuite, créons un exemple qui renvoie JSON en tant que backend d'une application iOS / Android. Vous pouvez introduire un module qui crée une API REST, tel que Django REST framework, mais je vais d'abord l'écrire moi-même.

Créer une application API

Créez une application appelée api sous le projet mybook.

$ python manage.py startapp api

Les fichiers suivants ont été créés dans le répertoire du projet mybook.

mybook/
    api/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

Vue qui renvoie JSON

Fondamentalement, il utilise le module json pour convertir un objet de dictionnaire Python en JSON.

import json

data = {'id': 1, 'name': 'hoge'}
json_str = json.dumps(data, ensure_ascii=False, indent=2)

Cependant, comme le dictionnaire Python n'est pas dans un ordre particulier, le contenu du JSON ne sera pas non plus dans un ordre particulier.

Nous utilisons donc le dictionnaire ordonné collections.OrderedDict.

Notez que OrderedDict peut être utilisé à partir de Python 2.7, donc si l'environnement du serveur est Python 2.6 ou inférieur, utilisez ordersdict.

ʻApi / views.py` ressemble à ceci:

import json
from collections import OrderedDict
from django.http import HttpResponse
from cms.models import Book


def render_json_response(request, data, status=None):
    """Renvoyer la réponse en JSON"""
    json_str = json.dumps(data, ensure_ascii=False, indent=2)
    callback = request.GET.get('callback')
    if not callback:
        callback = request.POST.get('callback')  #Pour JSONP avec POST
    if callback:
        json_str = "%s(%s)" % (callback, json_str)
        response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status)
    else:
        response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status)
    return response


def book_list(request):
    """Renvoie un JSON de livres et d'impressions"""
    books = []
    for book in Book.objects.all().order_by('id'):
        
        impressions = []
        for impression in book.impressions.order_by('id'):
            impression_dict = OrderedDict([
                ('id', impression.id),
                ('comment', impression.comment),
            ])
            impressions.append(impression_dict)
        
        book_dict = OrderedDict([
            ('id', book.id),
            ('name', book.name),
            ('publisher', book.publisher),
            ('page', book.page),
            ('impressions', impressions)
        ])
        books.append(book_dict)
    
    data = OrderedDict([ ('books', books) ])
    return render_json_response(request, data)

render_json_response () prend également en charge JSONP. Il peut être appliqué non seulement à l'API des smartphones mais aussi pour acquérir JSON avec Ajax de Javascript.

URL qui renvoie JSON

Créez un nouveau fichier appelé ʻapi / urls.py` et écrivez comme suit.

from django.urls import path
from api import views

app_name = 'api'
urlpatterns = [
    #Livres
    path('v1/books/', views.book_list, name='book_list'),   #liste
]

Incluez cet ʻapi / urls.py dans le mybook / urls.py` de votre projet.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('cms/', include('cms.urls')),
    path('api/', include('api.urls')),  #Ajouter ici
    path('admin/', admin.site.urls),
]

Ajout à INSTALLED_APPS

Vous devez indiquer au projet que vous avez installé l'application api. Il n'y a ni modèle ni modèle, donc cela fonctionne sans lui, mais faisons-le pour le moment. Lorsque j'ouvre ʻapi / apps.py, une classe appelée ApiConfig est définie. Ajoutez ceci à la fin de ʻINSTALLED_APPS dans mybook / settings.py avec la chaîne 'api.apps.ApiConfig',.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cms.apps.CmsConfig',   #application cms
    'api.apps.ApiConfig',   #application API
    'bootstrap4',           # django-bootstrap4
]

Vérifiez le résultat

Ensuite, ouvrez l'URL suivante dans votre navigateur.

http://127.0.0.1:8000/api/v1/books/

Le résultat est le suivant.

{
  "books": [
    {
      "id": 1,
      "name": "Premiers pas avec Django",
      "publisher": "GeekLab.Nagano",
      "page": 100,
      "impressions": [
        {
          "id": 1,
          "comment": "Ah ah\r\n bon"
        },
        {
          "id": 2,
          "comment": "Uuu\r\n ouais"
        },
        {
          "id": 4,
          "comment": "commentaire\r\n."
        }
      ]
    },
    {
      "id": 2,
      "name": "Livre 2",
      "publisher": "GeekLab.Nagano",
      "page": 200,
      "impressions": []
    }
  ]
}

Recevoir des données depuis des applications iOS / Android

JSON convient lors de l'envoi de données vers des applications iOS / Android, mais que faire si vous souhaitez recevoir des données?

Lors de la réception en JSON, vous pouvez extraire la chaîne JSON de raw_post_data dans la requête.

import json

def xxxx_post(request):
    python_obj = json.loads(request.raw_post_data)  #Avoir le corps de la requête POST directement dans la chaîne JSON
      :

Résumé de l'API smartphone

Si vous souhaitez créer uniquement l'API smartphone, vous pouvez utiliser la fonction du site de gestion de Django pour saisir les données et n'écrire que la partie API. Vous pouvez facilement créer un backend pour votre smartphone.

Si vous voulez vraiment créer une API, pensez à introduire Django REST framework.

finalement

C'est la fin de ce cours.

Après ce cours, vous pourrez approfondir votre compréhension en essayant les tutoriels officiels 1 à 7.

Recommended Posts

Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
Introduction à Python Django (6)
Premiers pas avec Python Django (5)
Django 1.11 a démarré avec Python3.6
1.1 Premiers pas avec Python
Premiers pas avec Python
Premiers pas avec Django 1
Premiers pas avec Python
Premiers pas avec Django 2
Introduction aux fonctions Python
Premiers pas avec Django avec PyCharm
Premiers pas avec Python responder v2
Premiers pas avec les applications Web Python
Premiers pas avec Python pour les classes PHPer
Premiers pas avec Python Bases de Python
Premiers pas avec les algorithmes génétiques Python
Premiers pas avec Python 3.8 sous Windows
Premiers pas avec Python pour les fonctions PHPer
Premiers pas avec python3 # 1 Apprenez les connaissances de base
Premiers pas avec Python Web Scraping Practice
Premiers pas avec apache2
Introduction à l'optimisation
Premiers pas avec Python Web Scraping Practice
Premiers pas avec Numpy
Premiers pas avec Spark
Premiers pas avec Pydantic
Premiers pas avec Jython
Premiers pas avec Heroku-Viewing Hello World en Python Django avec Raspberry PI 3
Démarrer avec Python avec 100 coups sur le traitement du langage
Django Getting Started Part 2 avec eclipse Plugin (PyDev)
Premiers pas avec AWS IoT facilement en Python
Django Getting Started Partie 3 sur Python3 & MySQL Connector
Matériel à lire lors de la mise en route de Python
Paramètres pour démarrer avec MongoDB avec python
Traduire Premiers pas avec TensorFlow
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Introduction à Tkinter 2: Button
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Premiers pas avec Go Assembly
Django Getting Started: 2_ Créer un projet
Django Premiers pas: 1_Construction de l'environnement
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ avec Apache
Django Getting Started: intégration 4_MySQL
Django Getting Started: intégration 3_Apache
Lancez-vous avec Django! ~ Tutoriel ④ ~
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Commencez avec Python! ~ ② Grammaire ~
Premiers pas avec python3 # 2 En savoir plus sur les types et les variables
Premiers pas avec Google App Engine pour Python et PHP
a commencé python
Commencez avec Python! ~ ① Construction de l'environnement ~
Lien pour commencer avec python
Introduction à Git (1) Stockage d'historique
Premiers pas avec Sphinx. Générer docstring avec Sphinx
Premiers pas avec Sparse Matrix avec scipy.sparse