Créez une application qui saisit, affiche et supprime des formulaires à l'aide de Python / Flask au lieu de DB.

introduction

Bonjour. Ceci est une entrée pour la catégorie Python du Calendrier de l'Avent 2019.

Il a commencé à écrire Python comme passe-temps à la fin de 2018 et est une personne sans expérience pratique dans différents secteurs. Aujourd'hui, j'ai essayé d'écrire un modèle et une vue avec Flask, et j'ai eu beaucoup de mal, alors j'aimerais l'écrire. En particulier, il était extrêmement difficile à supprimer. Il peut y avoir beaucoup de choses étranges, mais cela a fonctionné pour le moment. C'est pour les débutants.

Application terminée

スクリーンショット 2019-12-08 16.15.32.png

Code d'achèvement

app.py


from flask import Flask,render_template,request,redirect
app = Flask(__name__)

class DatabaseInit():
    db = []
    def __init__(self):
        pass

class DatabaseManager(DatabaseInit):
    def db_append(self,add_value):
        self.db.append(add_value)
    def db_get(self):
        return self.db
    def db_delete(self,value):
        self.db.pop(value)

@app.route('/', methods=['POST','GET'])
def index():
    if request.method == 'GET':
        db = DatabaseInit()
        return render_template('index.html')
    if request.method == 'POST':
        db_manage = DatabaseManager()
        num = request.form.get('comment')
        if num == None:
            view_lists = db_manage.db_get()
        else:
            db_manage.db_append(num)
            view_lists = db_manage.db_get()
        return render_template('index.html', show_lists = view_lists)

@app.route('/delete', methods=['POST'])
def delete():
    db_manage = DatabaseManager()
    id = int(request.form['delete_id'])
    db_manage.db_delete(id)
    return redirect('/',code=307)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port='5000',debug=True)

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Application Flask WEB</h1>
        <h2>Enregistrement des commentaires</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Affichage des commentaires</h2>
        {% for show_list in show_lists %}
        {{ show_list }}
        <form method="POST" name="delete" action="/delete">
            <input type="hidden" name="delete_id" value="{{ show_lists.index(show_list) }}">
            <input type="submit" name="delete_id" value="Effacer">
        </form>
    </br>
        {% endfor %}
    </body>
</html>

Les choses que je pensais avant d'écrire

environnement

la mise en oeuvre

Environnement virtuel

python -m venv venv

Démarrer venv

source venv/bin/activate

Installer Flask

pip install flask

Créer un fichier

touch app.py

Créer un modèle

Flask doit mettre le code HTML dans le dossier des modèles.

mkdir templates
cd templates
touch index.html

Constitution

/ Dossier de travail ┝app.py ┗/templates  ┗index.html HelloWorld

app.py


from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run()
python app.py

スクリーンショット 2019-12-08 14.15.37.png

Définir le mode de débogage, l'hôte, le port

Si vous définissez le mode de débogage sur Vrai, cela sera reflété simplement en mettant à jour le navigateur, donc c'est facile. Si vous définissez @ app.route ('/'), il sera traité comme GET. En d'autres termes, c'est l'écran qui s'affiche lorsque vous accédez à l'URL racine.

app.py


from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    app.run(host='127.0.0.1',port='5000',debug=True)

Rendu HTML

Importez render_template.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Hello World</h1>
        <p>C'est du html.</p>
    </body>
</html>

app.py


from flask import Flask,render_template
app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host='127.0.0.1', port='5000', debug=True)

スクリーンショット 2019-12-08 14.26.43.png

Créer un écran avec HTML

action = '/' signifie envoyer des données à '/'. Par exemple, si vous souhaitez passer à une autre page, écrivez «/ quelque chose» et les données seront envoyées à cette URL. Puisqu'il s'agit d'une seule page, nous enverrons les données au '/' actuel. method = "POST" envoie les données par POST. L'image est que GET publie des données sur une URL et envoie des données, et POST masque les données et envoie des données. Cette fois, nous afficherons la page initialisée au moment de GET, et afficherons la page qui a mis à jour les données envoyées dans le formulaire dans le cas de POST. name = 'comment' est requis pour recevoir les données dans app.py. Vous pouvez utiliser n'importe quelle chaîne de caractères de votre choix.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Application Flask WEB</h1>
        <h2>Enregistrement des commentaires</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Affichage des commentaires</h2>
    </body>
</html>

スクリーンショット 2019-12-08 14.37.23.png

Transmettez les données au html et affichez-les

Flask utilise un moteur de modèle appelé jinja2. Côté python, écrivez le nom de la variable côté html = le nom de la variable côté python dans l'argument de la fonction render_template (). Du côté html, il peut être affiché en tapant {{nom de la variable côté html}}.

app.py


from flask import Flask,render_template
app = Flask(__name__)


@app.route('/')
def index():
    show_py = 'Je viens de Python'
    return render_template('index.html',show_html = show_py)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port='5000', debug=True)

index.html


<html>

<head>
    <title>Flask</title>
</head>

<body>
    <h1>Application Flask WEB</h1>
    <h2>Enregistrement des commentaires</h2>
    <form action="/" name="comment" method="POST">
        <input type="text" name="comment">
        <input type="submit" name="submit_comment">
    </form>
    <h2>Affichage des commentaires</h2>
    {{ show_html }}
</body>

</html>

スクリーンショット 2019-12-08 14.57.20.png

Créer une base de données (cette fois un tableau) et un modèle

Cette fois, je vais faire la base de données sous forme de tableau. Initialisez le tableau avec DatabaseInit. Créez une méthode dans DatabaseManager et utilisez cette méthode pour faire fonctionner la base de données. Cette fois, j'ai créé trois fonctions: ajouter un élément, obtenir un élément et supprimer un élément. J'ai utilisé un tableau cette fois, mais je pense que l'idée est la même tant qu'elle est réécrite en SQL ou DB.

Si vous ne voulez rien écrire mais avez besoin d'écrire quelque chose, écrivez pass. Le but est de ne rien faire. L'instance est attribuée à soi. En Python, le premier argument de chaque méthode est toujours self. def __ init __ (self): est exécuté lors de l'instanciation. La classe DatabaseManager (DatabaseInit) est un héritage. Héritage pour accéder à la liste db.

app.py


class DatabaseInit():
    db = []
    def __init__(self):
        pass

class DatabaseManager(DatabaseInit):
    def db_append(self,add_value):
        self.db.append(add_value)
    def db_get(self):
        return self.db
    def db_delete(self,value):
        self.db.pop(value)

Créer un routage et un traitement

Définissez method = ['GET', 'POST'] pour qu'il soit accessible à la fois par GET et POST. GET est l'écran que vous voyez lorsque vous y accédez pour la première fois, et POST est l'écran que vous voyez lorsque les données sont envoyées. Traitez-le avec une instruction if. Jugez avec request.method ==. Instanciez la classe DatabaseInit avec db = DatabaseInit (). En d'autres termes, cette fois, nous créons un tableau vide appelé db. Le processus POST a également une instruction if imbriquée. Il s'agit de séparer le processus d'envoi d'une chaîne de caractères au format html du processus de suppression. num = request.form.get ('comment') est attribué lorsque vous envoyez la chaîne au format html. Il y a if num == None:, ce qui signifie que lorsque la suppression est envoyée, elle mènera à ce processus. Lorsque la chaîne est envoyée, sinon: ce qui suit est traité. Dans db_manage.db_append (num), la chaîne affectée à la variable num est ajoutée au tableau. J'obtiens un tableau avec db_manage.db_get ().

app.py


from flask import Flask,render_template,request,redirect
app = Flask(__name__)

@app.route('/', methods=['POST','GET'])
def index():
    if request.method == 'GET':
        db = DatabaseInit()
        return render_template('index.html')
    if request.method == 'POST':
        db_manage = DatabaseManager()
        num = request.form.get('comment')
        if num == None:
            view_lists = db_manage.db_get()
        else:
            db_manage.db_append(num)
            view_lists = db_manage.db_get()
        return render_template('index.html', show_lists = view_lists)

Afficher les show_lists en html

Dans jinja2, vous pouvez intégrer du code Python en le plaçant dans {%%}. Puisque nous voulons sortir la liste une par une, entourez le processus à répéter avec {% for xx in xxx%} ~ {% endfor%}. If s'écrit {% if expression%} ~ {% endif%}.

index.html


<html>
    <head>
        <title>Flask</title>
    </head>
    <body>
        <h1>Application Flask WEB</h1>
        <h2>Enregistrement des commentaires</h2>
        <form action="/" name="comment" method="POST">
            <input type="text" name="comment">
            <input type="submit" name="submit_comment">
        </form>
        <h2>Affichage des commentaires</h2>
        {% for show_list in show_lists %}
        {{ show_list }}
        <form method="POST" name="delete" action="/delete">
            <input type="hidden" name="delete_id" value="{{ show_lists.index(show_list) }}">
            <input type="submit" name="delete_id" value="Effacer">
        </form>
    </br>
        {% endfor %}
    </body>
</html>

La partie la plus addictive était la partie de suppression. Avec un formulaire normal, seuls POST et GET peuvent être envoyés, utilisez donc type = "hidden" et envoyez name = "delete_id" et value = "{{show_lists.index (show_list)}}" dans le post. .. Il n'apparaît pas à l'écran. La reconnaissance de la forme étant un peu faible, il peut y avoir des endroits où il n'est pas nécessaire de décrire le nom. .. S'il vous plaît, faites-moi savoir. ..

Route / supprimer

Lorsque le bouton de suppression est pressé, post obtiendra la valeur d'index du tableau à supprimer, et la méthode db_delete () supprimera l'élément du tableau. Puisque les données acquises par request.form sont une chaîne de caractères, la conversion de type est effectuée avec int (). redirect () signifie forcer la page à se déplacer. Avec render_template (), une page sera créée à l'URL actuelle, donc une URL étrange telle que local / delete / index.html entraînera une erreur. '/' vous dirigera vers la def index (): function. code = 307 signifie rediriger avec POST. La redirection enverra les données par GET, donc en définissant le code sur 307, ce sera une opération pour maintenir POST.

app.py


@app.route('/delete', methods=['POST'])
def delete():
    db_manage = DatabaseManager()
    id = int(request.form['delete_id'])
    db_manage.db_delete(id)
    return redirect('/',code=307)

c'est tout

Pour la première fois, j'ai écrit quelque chose de techniquement sur Qiita correctement, donc je pense qu'il y a beaucoup de parties qui ne sont pas complètement expliquées, mais j'espère que cela aide quelqu'un. Si vous trouvez des erreurs, veuillez nous en informer et nous les corrigerons.

La prochaine fois, j'aimerais essayer d'utiliser DB!

Recommended Posts

Créez une application qui saisit, affiche et supprime des formulaires à l'aide de Python / Flask au lieu de DB.
Une application cliente python qui télécharge et supprime des fichiers de S3 en spécifiant un compartiment
Comment convertir un tableau en dictionnaire avec Python [Application]
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04
[Python] Créez rapidement une API avec Flask
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant venv sur Ubuntu 14.04 LTS
Créez une application Web qui convertit le PDF en texte à l'aide de Flask et PyPDF2
Créez une application qui devine les étudiants avec Python
Créer une page qui se charge indéfiniment avec python
Créer une carte Web en utilisant Python et GDAL
Facile à créer une application console Python avec Click
Créons une application capable de rechercher des images similaires avec Python et Flask Part2
Créez un bot discord qui notifie unilatéralement avec python (seuls les requêtes et json sont utilisés)
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Confirmer l'écrasement du fichier avec l'option de prendre l'objet fichier comme argument avec Python argparse
Créer un serveur local GIF animé avec Python + Flask
python --Exporte l'histogramme bidimensionnel par Matplotlib sous forme de tableau
Analyser et visualiser JSON (application Web ⑤ avec Python + Flask)
Un serveur qui fait écho aux données POSTées avec flask / python
[python] Créez un tableau de dates avec des incréments arbitraires avec np.arange
Je souhaite créer une source sonore de karaoké en séparant les instruments et les voix en utilisant Python
Créez un tableau à deux dimensions en ajoutant une ligne à la fin d'un tableau vide avec numpy
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
Créez un code QR qui affiche "Izumi Oishi" en grattant
Créons un script qui s'enregistre avec Ideone.com en Python.
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Créons un diagramme PRML avec Python, Numpy et matplotlib.
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
[Python] Un programme qui crée un tableau à deux dimensions en combinant des entiers
Créez le code qui renvoie "A et prétendant B" en python
Tourner un tableau de chaînes avec une instruction for (Python3)
[AWS] Version de déploiement d'application Flask qui a tenté de créer un environnement Python avec eb [Elastic Beanstalk]
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
J'obtiens une erreur du système d'exploitation: [Errno 8] Erreur de format d'exécution lors de l'exécution d'une application Flask avec une commande python
Créer un tableau numpy python
Application Web avec Python + Flask ② ③
Créer un répertoire avec python
Application Web avec Python + Flask ④
[MariaDB] Installez MariaDB sous Linux et créez une base de données et un utilisateur opérationnel.
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Application Web réalisée avec Python + Flask (en utilisant VScode) # 1-Construction d'environnement virtuel-
Créez un fichier temporaire avec django sous forme de zip et renvoyez-le
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
Utilisez sqlalchemy pour rechercher la table DB et créer un Dataflame pour les pandas
[Ev3dev] Créez un programme qui capture LCD (écran) en utilisant python
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
Exportez le rapport au format PDF à partir de DB avec Python et attachez-le automatiquement à un e-mail et envoyez-le
Créer un environnement de développement à l'aide de Jupyter et Flask avec Python dans Docker (prend en charge à la fois VS Code / code-server)