Hallo. Dies ist ein Eintrag für die Kategorie Python des Adventskalenders 2019.
Er begann Ende 2018 Python als Hobby zu schreiben, ist eine Person aus einer anderen Branche und hat keine praktische Erfahrung. Heute habe ich versucht, ein Modell und eine Ansicht mit Flask zu schreiben, und ich hatte große Probleme, deshalb würde ich es gerne schreiben. Insbesondere war das Löschen äußerst schwierig. Es mag viele seltsame Dinge geben, aber es hat vorerst funktioniert. Es ist für Anfänger.
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>Flasche WEB App</h1>
<h2>Kommentar Registrierung</h2>
<form action="/" name="comment" method="POST">
<input type="text" name="comment">
<input type="submit" name="submit_comment">
</form>
<h2>Kommentaranzeige</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="Löschen">
</form>
</br>
{% endfor %}
</body>
</html>
python -m venv venv
source venv/bin/activate
pip install flask
touch app.py
Flask muss HTML in den Vorlagenordner legen.
mkdir templates
cd templates
touch index.html
/ Arbeitsordner ┝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
Wenn Sie den Debug-Modus auf True setzen, wird dies nur durch Aktualisieren des Browsers wiedergegeben, sodass dies einfach ist. Wenn Sie @ app.route ('/') festlegen, wird dies als GET behandelt. Mit anderen Worten, es ist der Bildschirm, der angezeigt wird, wenn Sie auf die Stamm-URL zugreifen.
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)
Importieren Sie render_template.
index.html
<html>
<head>
<title>Flask</title>
</head>
<body>
<h1>Hello World</h1>
<p>Das ist 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 = '/' bedeutet, Daten an '/' zu senden. Wenn Sie beispielsweise zu einer anderen Seite wechseln möchten, schreiben Sie '/ etwas', und die Daten werden an diese URL gesendet. Da dies eine einzelne Seite ist, senden wir die Daten an das aktuelle '/'. method = "POST" sendet die Daten per POST. Das Bild ist, dass GET Daten an eine URL veröffentlicht und Daten sendet und POST Daten verbirgt und Daten sendet. Dieses Mal zeigen wir die Seite an, die zum Zeitpunkt von GET initialisiert wurde, und die Seite, auf der die im Formular gesendeten Daten im Fall von POST aktualisiert wurden. name = 'comment' ist erforderlich, um die Daten in app.py zu erhalten. Sie können eine beliebige Zeichenfolge verwenden.
index.html
<html>
<head>
<title>Flask</title>
</head>
<body>
<h1>Flasche WEB App</h1>
<h2>Kommentar Registrierung</h2>
<form action="/" name="comment" method="POST">
<input type="text" name="comment">
<input type="submit" name="submit_comment">
</form>
<h2>Kommentaranzeige</h2>
</body>
</html>
Flask verwendet eine Template-Engine namens jinja2. Schreiben Sie auf der Python-Seite den Variablennamen auf der HTML-Seite = den Variablennamen auf der Python-Seite in das Argument der Funktion render_template (). Auf der HTML-Seite kann es durch Eingabe von {{Variablenname auf der HTML-Seite}} angezeigt werden.
app.py
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
show_py = 'Ich komme aus 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>Flasche WEB App</h1>
<h2>Kommentar Registrierung</h2>
<form action="/" name="comment" method="POST">
<input type="text" name="comment">
<input type="submit" name="submit_comment">
</form>
<h2>Kommentaranzeige</h2>
{{ show_html }}
</body>
</html>
Dieses Mal werde ich die Datenbank als Array erstellen. Initialisieren Sie das Array mit DatabaseInit. Erstellen Sie eine Methode in DatabaseManager und verwenden Sie diese Methode, um die Datenbank zu betreiben. Dieses Mal habe ich drei Funktionen erstellt: Element hinzufügen, Element abrufen und Element löschen. Ich habe diesmal ein Array verwendet, aber ich denke, die Idee ist dieselbe, solange sie in SQL oder DB umgeschrieben wird.
Wenn Sie nichts schreiben möchten, aber etwas schreiben müssen, schreiben Sie pass. Es geht darum, nichts zu tun. Die Instanz ist sich selbst zugeordnet. In Python ist das erste Argument jeder Methode immer self. def __ init __ (self): wird ausgeführt, wenn es instanziiert wird. Klasse DatabaseManager (DatabaseInit) ist eine Vererbung. Vererbung auf Zugriffsliste 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)
Setzen Sie method = ['GET', 'POST'], damit sowohl GET als auch POST darauf zugreifen können. GET ist der Bildschirm, den Sie sehen, wenn Sie zum ersten Mal darauf zugreifen, und POST ist der Bildschirm, den Sie sehen, wenn die Daten gesendet werden. Verarbeiten Sie es mit einer if-Anweisung. Richter mit request.method ==. Instanziieren Sie die DatabaseInit-Klasse mit db = DatabaseInit (). Mit anderen Worten, dieses Mal erstellen wir ein leeres Array namens db. Der POST-Prozess hat auch eine verschachtelte if-Anweisung. Dies dient dazu, den Vorgang des Sendens einer Zeichenfolge im HTML-Formular vom Vorgang des Löschens zu trennen. num = request.form.get ('comment') wird zugewiesen, wenn Sie die Zeichenfolge im HTML-Formular senden. Es gibt if num == None:, was bedeutet, dass das Senden beim Löschen zu diesem Vorgang führt. Wenn die Zeichenfolge gesendet wird, sonst: Folgendes wird verarbeitet. In db_manage.db_append (num) wird die der Variablen num zugewiesene Zeichenfolge zum Array hinzugefügt. Ich erhalte das Array mit 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)
In jinja2 können Sie Python-Code einbetten, indem Sie ihn in {%%} einschließen. Ich möchte die Liste einzeln ausgeben, also den Vorgang, den Sie wiederholen möchten, mit {% für xx in xxx%} ~ {% endfor%} einschließen. If wird als {% if expression%} ~ {% endif%} geschrieben.
index.html
<html>
<head>
<title>Flask</title>
</head>
<body>
<h1>Flasche WEB App</h1>
<h2>Kommentar Registrierung</h2>
<form action="/" name="comment" method="POST">
<input type="text" name="comment">
<input type="submit" name="submit_comment">
</form>
<h2>Kommentaranzeige</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="Löschen">
</form>
</br>
{% endfor %}
</body>
</html>
Der süchtig machende Teil war der Löschteil. Bei einem normalen Formular können nur POST und GET gesendet werden. Verwenden Sie daher type = "hidden" und senden Sie name = "delete_id" und value = "{{show_lists.index (show_list)}}" in der Post .. Es wird nicht auf dem Bildschirm angezeigt. Da die Erkennung der Form etwas schwach ist, kann es Stellen geben, an denen es nicht erforderlich ist, den Namen zu beschreiben. .. Lass es mich wissen, bitte. ..
Wenn die Schaltfläche Löschen gedrückt wird, erhält post den Indexwert des zu löschenden Arrays, und die Methode db_delete () löscht das Element aus dem Array. Da die von request.form erfassten Daten eine Zeichenfolge sind, wird die Typkonvertierung mit int () durchgeführt. redirect () bedeutet, dass die Seite verschoben werden muss. Mit render_template () wird eine Seite unter der aktuellen URL erstellt, sodass eine seltsame URL wie local / delete / index.html zu einem Fehler führt. '/' leitet Sie zur Funktion def index (): weiter. code = 307 bedeutet, mit POST umzuleiten. Die Umleitung sendet Daten per GET. Wenn Sie also den Code auf 307 setzen, wird der POST beibehalten.
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)
Zum ersten Mal habe ich etwas technisch richtig über Qiita geschrieben, daher denke ich, dass es viele Teile gibt, die nicht vollständig erklärt werden, aber ich hoffe, dass es jemandem hilft. Wenn Sie Fehler finden, lassen Sie es uns bitte wissen und wir werden sie korrigieren.
Nächstes Mal möchte ich versuchen, DB zu verwenden!