J'ai eu l'opportunité de créer une application web à partir de zéro avec Python, donc en résumé! Cet article concerne la mise en forme des données obtenues à partir de la base de données. Si les données renvoyées par l'API ne sont pas uniformes, les ingénieurs front-end seront en difficulté! Donc, cette fois, je vais vous expliquer comment retourner des données dans un format de données unifié appelé json!
Articles jusqu'à présent [Python] Application Web à partir de 0! Travaux pratiques (0) ~ Construction de l'environnement --- Qiita [Python] Application Web à partir de 0! Pratique (1) -Conception, construction de bases de données- --Qiita [Python] Application Web à partir de 0! Pratique (2) -Bonjour le monde- --Qiita [Python] Application Web à partir de 0! Pratique (3) ~ Implémentation d'API ~ --Qiita
L'objectif est de créer une application Web avec la fonctionnalité CURD en utilisant HTML, CSS, JavaScript, Python et SQL.
Les dossiers et fichiers créés cette fois sont les suivants.
todo/ └ api/ ├ index.py └ Todo.py
Commencez par convertir les données obtenues à partir de la base de données en un objet de classe pour faciliter la gestion par programme. Depuis Python 3.7, il existe une fonction appelée dataclasses, qui facilite la définition des classes. dataclasses --- Classes de données - Documentation Python 3.8.5
Tout d'abord, exécutez la commande suivante sur l'invite de commande.
cmd
pip install dataclasses
Ensuite, créez un nouveau fichier appelé Todo.py sous le dossier api.
Todo.py
from dataclasses import dataclass
@dataclass
class Todo:
id: str
title: str
created: str
is_deleted: str
Puis modifiez index.py.
index.py
# -*- coding:utf-8 -*-
#Charger un package externe
from bottle import route, run
import psycopg2
from Todo import Todo #Ajout du chargement de la classe Todo créée ci-dessus
#Obtenez une connexion à la base de données
def get_connection():
return psycopg2.connect("host=localhost port=5432 dbname=TodoDatabase user=postgres password=postgres")
#Obtenir les données Todo
@route('/todos')
def get_todos():
#Établir une connexion avec la base de données
with get_connection() as conn:
#Générer un curseur
with conn.cursor() as cur:
#Exécuter SQL
cur.execute('SELECT * FROM todo')
#Obtenir 1 résultat de requête dans la base de données
data = cur.fetchone()
#Convertir les données acquises de la base de données en objet de classe (créer une instance de classe Todo) et retourner
todo = Todo(data[0], data[1], data[2], data[3])
return str(todo)
#Configuration de l'exécution du serveur Web
#URL"http://[host]:[port]/[route]"Devient la composition de
run(host='localhost', port=8080, debug=True)
Accédez au dossier racine de l'application sur l'invite de commande, exécutez python index.py
pour démarrer le serveur et accédez à http: // localhost: 8080 / todos avec un navigateur, vous verrez les données suivantes Je pense.
Convertissons-le au format json du sujet principal.
Les classes générées par les classes de données peuvent être facilement converties au format json en utilisant dataclasses_json. GitHub - lidatong/dataclasses-json: Easily serialize Data Classes to and from JSON
Exécutez la commande suivante sur l'invite de commande.
pip install dataclasses-json
Modifiez Todo.py. Importez des dataclasses_json supplémentaires et ajoutez l'annotation dataclass_json.
Todo.py
from dataclasses import dataclass
from dataclasses_json import dataclass_json #ajouter à
@dataclass_json #ajouter à
@dataclass
class Todo:
id: str
title: str
created: str
is_deleted: str
Modifiez ensuite index.py comme suit.
index.py
# -*- coding:utf-8 -*-
#Charger un package externe
from bottle import route, run, response #réponse ajoutée
import psycopg2
from Todo import Todo
import json #ajouter à
#Obtenez une connexion à la base de données
def get_connection():
return psycopg2.connect("host=localhost port=5432 dbname=TodoDatabase user=postgres password=postgres")
#Obtenir les données Todo
@route('/todos')
def get_todos():
#Changer le format des données de réponse en json
response.headers['Content-Type'] = 'application/json'
response.headers['Cache-Control'] = 'no-cache'
#Établir une connexion avec la base de données
with get_connection() as conn:
#Générer un curseur
with conn.cursor() as cur:
#Exécuter SQL
cur.execute('SELECT * FROM todo')
#Obtenir 1 résultat de requête dans la base de données
data = cur.fetchone()
#Convertir les données acquises de DB en json et retourner
#Date et heure de création (données)[2]) Cast en type chaîne
# "ensure_ascii=False"Si vous ne spécifiez pas, les caractères non ASCII"\uXXXX"Le japonais ne peut pas être retourné car il est échappé sous la forme de
#Classez les données dans la base de données (Todo()) → Type de dictionnaire (.__dict__)→json(json.dumps)Besoin d'être converti en
todo = Todo(data[0], data[1], str(data[2]), data[3])
return json.dumps(todo.__dict__, ensure_ascii=False)
#Configuration de l'exécution du serveur Web
#URL"http://[host]:[port]/[route]"Devient la composition de
run(host='localhost', port=8080, debug=True)
Quand je lance à nouveau python index.py
pour démarrer le serveur et accéder à http: // localhost: 8080 / todos avec un navigateur, cela revient comme ça!
En renvoyant chaque donnée sous la forme d'un ensemble de valeur-clé de cette manière, il est devenu très facile à manipuler au niveau du frontal.
Il est également très facile d'écrire lorsqu'un ingénieur frontal demande une spécification d'API!
À propos, le navigateur a été confirmé pour fonctionner avec Google Chrome, mais il a une extension qui formate les données au format json. C'est pratique car il peut être coloré et le panneau peut être ouvert et fermé, alors essayez-le! JSON Formatter --Chrome Webstore
Nous avons implémenté l'API Rest qui renvoie les données de la base de données au format json!
Jusqu'à présent, j'avais l'habitude de saisir directement l'URL pour accéder à l'API, mais maintenant je souhaite créer une page. La prochaine fois, je vais créer du HTML et y accéder à partir du code JavaScript!
Recommended Posts