[Python] Application Web à partir de 0! Pratique (4) - Mise en forme des données-

Aperçu

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

Je veux que cette personne lise

objectif

L'objectif est de créer une application Web avec la fonctionnalité CURD en utilisant HTML, CSS, JavaScript, Python et SQL.

Les choses nécessaires

1. Structure des dossiers

Les dossiers et fichiers créés cette fois sont les suivants.

todo/  └ api/   ├ index.py   └ Todo.py

2. Convertissez les données extraites de la base de données en un objet de classe

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. 2020-08-28_10h47_51.png

2. Convertissez l'objet de classe au format json

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! 2020-08-28_11h34_40.png 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!

prime

À 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

Résumé

Nous avons implémenté l'API Rest qui renvoie les données de la base de données au format json!

la prochaine fois···

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

[Python] Application Web à partir de 0! Pratique (4) - Mise en forme des données-
[Python] Application Web à partir de 0! Pratique (2) -Bonjour le monde-
[Python] Application Web à partir de 0! Pratique (3) - Mise en œuvre de l'API
[Python] Application Web à partir de 0! Pratique (0) -Construction environnementale-
[Python] Application Web à partir de 0! Pratique (1) -Conception, construction DB-
Python: lecture de données JSON à partir de l'API Web
[Python] Flux du scraping Web à l'analyse des données
Extraire des données d'une page Web avec Python
Acquisition de données à partir de l'API d'analyse avec l'application Web Client API Google pour python Partie 2
Application Python: visualisation de données, partie 2: matplotlib
Application Web avec Python + Flask ② ③
Application Web avec Python + Flask ④
Python: exclure les balises des données html
Application de Python: Nettoyage des données Partie 1: Notation Python
Frappez les données du trésor de Python Pandas
Obtenir des données de Quandl en Python
Application Python: Traitement des données # 3: Format des données
Application Python: visualisation de données partie 1: basique
Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
Développement d'une application WEB avec Django [Ajouter des données depuis l'écran de gestion]
Une histoire sur tout, de la collecte de données au développement d'IA et à la publication d'applications Web en Python (3. développement d'IA)
Recevoir des données textuelles de mysql avec python
[Note] Obtenir des données de PostgreSQL avec Python
Utiliser le type de données PostgreSQL (jsonb) à partir de Python
[Python] Une application web rapide avec Bottle!
[Python] Conception d'applications Web pour l'apprentissage automatique
Exécutez une application Web Python avec Docker
Obtenez des données de séries chronologiques de k-db.com avec Python
Exécuter des scripts Python à partir d'applications C # GUI
Comment ouvrir un navigateur Web à partir de python
Analyse de données python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
sql à sql
MeCab de Python
Application de Python: Traitement des données Partie 2: Analyse de divers formats de données
Obtenez uniquement des articles de pages Web en Python
[python] Lecture de données
Tendances 2014 du cadre d'application Web (PHP / Java / Ruby / Python / Perl)
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Recevez des données de dictionnaire à partir de programmes Python avec AppleScript
(Python) Essayez de développer une application Web en utilisant Django
Obtenez des données du module GPS à 10 Hz avec Python
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Envoyer des données de Python au traitement via une communication socket
Application Web réalisée avec Python3.4 + Django (Construction de l'environnement Part.1)
[Bases de la science des données] Collecte de données depuis RSS avec python
Obtenir des données de la base de données via ODBC avec Python (Access)
Générez Word Cloud à partir de données de cas d'essai avec python3
Utilisez Thingsspeak de Python
Analyse de données avec python 2
Touchez MySQL depuis Python 3
Framework Web Django Python
Exploitez Filemaker depuis Python
Utiliser fluentd de python
Extraction de données depuis S3
Bibliothèques de visualisation de données Python
Changements de Python 2 à Python 3.0
Présentation de l'analyse de données python
Python depuis ou import