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.
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>
python -m venv venv
source venv/bin/activate
pip install flask
touch app.py
Flask doit mettre le code HTML dans le dossier des modèles.
mkdir templates
cd templates
touch index.html
/ 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
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)
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)
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>
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>
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)
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)
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. ..
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)
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