Après avoir étudié les samedis et dimanches, j'ai fait un petit livre de lecture. Cliquez ici pour l'écran.
Tout ce que vous avez à faire est d'enregistrer les livres que vous avez lus et de consulter la liste des livres enregistrés.
Le code source est le suivant. Je vais omettre le code HTML car il est tel que vous le voyez.
app.py
from flask import Flask, render_template,url_for,request,redirect
from sqlalchemy import create_engine
import pandas
import psycopg2
'''
Site référencé
https://tanuhack.com/pandas-postgres-readto/
'''
#Informations de connexion PostgreSQL
connection_config = {
'user': 'user',
'password': 'password',
'host': 'localhost',
'port': '5432',
'database': 'mydb'
}
#Connexion à la base de données avec psycopg2
connection = psycopg2.connect(**connection_config)
#Création de df
df = pandas.read_sql(sql='SELECT * FROM books;', con=connection)
header = ['id','Titre de livre','Auteur','Date de lecture','Évaluation']
record = df.values.tolist() #Une liste de tableaux à deux dimensions de tous les enregistrements, sans inclure l'index DataFrame
app = Flask(__name__)
@app.route('/')
def index():
#Instruction SELECT mise à jour à partir de la base de données à chaque lecture de l'index
df = pandas.read_sql(sql='SELECT * FROM books;', con=connection)
record = df.values.tolist()
return render_template('index.html', header=header, record=record)
@app.route('/result', methods=['GET','POST'])
def addition():
if request.method == "POST":
#Besoin de réacquérir le nombre d'enregistrements
df = pandas.read_sql(sql='SELECT * FROM books;', con=connection)
record = df.values.tolist()
#Obtenez la valeur de l'instruction INSERT en fonction du contenu de POST, id est le nombre actuel d'enregistrements+1
book_id = len(record)+1
res1 = request.form['Titre de livre']
res2 = request.form['Auteur']
res3 = request.form['Date de lecture']
res4 = request.form['Évaluation']
dict1={'id':[book_id],'name':[res1],'writer':[res2],'read_day':[res3],'rank':[res4]}
#SQL Alchemy requis pour voler vers DB
engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{database}'.format(**connection_config))
df = pandas.DataFrame(data=dict1)
df.to_sql('books', con=engine, if_exists='append', index=False)
return redirect(url_for('index'))
##la magie
if __name__ == "__main__":
app.run(debug=True)
En résumé, il y a une table des livres lus dans PostgreSQL, le contenu acquis en tant que DataFrame par l'instruction SELECT est répertorié, et envoyé à index.html avec render_template pour être affiché comme "livres que vous lisez". Ensuite, l'enregistrement du livre que vous avez lu est traité comme une méthode POST en entrant les informations dans le formulaire de saisie et en appuyant sur le bouton d'enregistrement. L'identifiant reçoit automatiquement le dernier numéro, les autres sont obtenus à partir du formulaire d'entrée et une ligne de données de type dictionnaire est créée. Enfin, convertissez les données de type dictionnaire en DataFrame et ignorez l'instruction INSERT dans la base de données avec df.to_sql pour ajouter les données.
・ Impossible de déployer J'ai essayé d'utiliser heroku, mais celui déployé n'a pas bien commencé et j'ai abandonné. La cause n'est pas claire, mais je pense que j'aurais dû utiliser virtualenv car il semblait être affecté par ce que j'ai fait dans l'environnement brut.
・ Fonction insuffisante Comme vous pouvez le voir, il n'a que la possibilité d'ajouter des données. Si vous souhaitez modifier ou supprimer les informations d'enregistrement, vous devez accéder directement à la base de données à l'invite de commande.
Pour le moment, j'ai pu relier la DB et la page web (acquisition de la DB et ajout à la DB) que je voulais faire au minimum, donc je vais lui donner un point. Ensuite, je n'ai pas décidé de refaire le livre de lecture ou d'en créer un autre, mais j'aimerais le faire avec un style de création utilisant virtualenv et le déployer progressivement sur heroku.
Recommended Posts