Flask-View-Funktionen
View-Funktionen sind der Kernbestandteil einer Flask-Anwendung; sie verarbeiten Anfragen und erzeugen Antworten.
View-Funktionen sind eng mit dem Routing verbunden und verwenden Routen, um URLs bestimmten View-Funktionen zuzuordnen.
Das Folgende ist eine ausführliche Erläuterung der Flask-View-Funktionen, einschließlich der Definition, der Verwendung von Anfragedaten, der Rückgabe von Antworten und der Fehlerbehandlung.
- View-Funktion definieren: View-Funktionen sind die Kernfunktionalität, die Anfragen verarbeitet und Antworten zurückgibt.
- Anfragedaten empfangen: Verwenden
requestVerwenden Sie das Objekt, um URL-Parameter, Formulardaten, Abfrageparameter und so weiter zu erhalten. - Eine Antwort zurückgeben: Kann Zeichenfolgen, HTML, JSON oder benutzerdefinierte Antwortobjekte zurückgeben.
- Anfragen und Antworten verarbeiten: Verwenden
requestObjekt undmake_responseWird verwendet, um Anfragen zu verarbeiten und benutzerdefinierte Antworten zu generieren. - Fehler behandeln: Behandeln Sie Ausnahmen innerhalb von View-Funktionen oder verwenden Sie den Fehlerbehandlungsmechanismus von Flask.
- Dekoratoren für View-Funktionen: Verwenden
@app.before_request、@app.after_requestDekoratoren behandeln Logik vor und nach Anfragen. - Von View-Funktionen zurückgegebene StatuscodesHTTP-Statuscodes können angegeben werden, um das Ergebnis der Anfrageverarbeitung anzugeben.
1. View-Funktionen definieren
Eine View-Funktion ist eine gewöhnliche Python-Funktion, die Anfragen entgegennimmt und Antworten zurückgibt. View-Funktionen werden normalerweise zusammen mit Routen verwendet, wobei URLs über Dekoratoren View-Funktionen zugeordnet werden.
Beispiel
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, World!'
@app.route('/'): Die Root-URL zuordnen/aufhomedie View-Funktion.def home()View-Funktion, gibt eine Zeichenfolge zurück'Hello, World!'als Antwort.
2. Request-Daten empfangen
View-Funktionen können verschiedene Arten von Request-Daten empfangen, darunter URL-Parameter, Formulardaten, Query-Parameter usw.
URL-Parameter abrufen:
Beispiel
def greet(name):
return f'Hello, {name}!'
<name>ist ein URL-Parameter, der an die View-Funktion übergeben wird.greet。
Formulardaten abrufen:
Beispiel
@app.route('/submit', methods=['POST'])
def submit():
username = request.form.get('username')
return f'Form submitted by {username}!'
request.form.get('username'): Ruft das Feld username aus den Formulardaten in einer POST-Anfrage ab.
Query-Parameter abrufen:
Beispiel
def search():
query = request.args.get('query')
return f'Search results for: {query}'
request.args.get('query'): Ruft den Query-Parameter query aus einer GET-Anfrage ab.
3. Antwort zurückgeben
View-Funktionen können mehrere Arten von Antworten zurückgeben, darunter Zeichenketten, HTML, JSON oder benutzerdefinierte Antwortobjekte.
String zurückgeben:
Beispiel
def message():
return 'This is a simple message.'
HTML-Vorlagen zurückgeben:
Beispiel
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
render_template('hello.html', name=name)Rendern Sie die HTML-Vorlage hello.html und übergeben Sie die Variable name an die Vorlage.
JSON-Daten zurückgeben:
Beispiel
@app.route('/api/data')
def api_data():
data = {'key': 'value'}
return jsonify(data)
jsonify(data)Konvertieren Sie ein Python-Dictionary in eine JSON-Antwort.
Benutzerdefinierte Antwortobjekte zurückgeben:
Beispiel
@app.route('/custom')
def custom_response():
response = Response('Custom response with headers', status=200)
response.headers['X-Custom-Header'] = 'Value'
return response
Response('Custom response with headers', status=200): Erstellen Sie ein benutzerdefiniertes Antwortobjekt und legen Sie Antwort-Header fest.
4. Anfragen und Antworten verarbeiten
View-Funktionen können auf das Request-Objekt zugreifen und Antworten basierend auf Anfragedaten generieren. Sie können das Request-Objekt verwenden, um Anfrageinformationen abzurufen, und make_response, um benutzerdefinierte Antworten zu erstellen.
Verwendung des Request-Objekts:
Beispiel
@app.route('/info')
def info():
user_agent = request.headers.get('User-Agent')
return f'Dein User-Agent ist {user_agent}'
request.headers.get('User-Agent'): Rufen Sie die User-Agent-Informationen aus den Request-Headern ab.
Verwenden Sie make_response:
Beispiel
@app.route('/header')
def custom_header():
response = make_response('Antwort mit benutzerdefiniertem Header')
response.headers['X-Custom-Header'] = 'Value'
return response
make_response('Response with custom header'): Erstellen Sie ein Response-Objekt und legen Sie benutzerdefinierte Header-Informationen fest.
5. Fehler behandeln
Ausnahmen können innerhalb von View-Funktionen behandelt werden, oder Fehler können mithilfe des Fehlerbehandlungsmechanismus von Flask behandelt werden.
Fehler in View-Funktionen behandeln:
Beispiel
def divide(x, y):
try:
result = x / y
return f'Ergebnis: {result}'
except ZeroDivisionError:
return 'Fehler: Division durch Null', 400
Verwenden Sie eine try-except-Anweisung, um Fehler durch Division durch Null zu behandeln und eine benutzerdefinierte Fehlermeldung und einen Statuscode zurückzugeben.
Globale Fehlerbehandlung:
Beispiel
def not_found(error):
return 'Page not found', 404
@app.errorhandler(404): Definieren Sie eine Funktion, die 404-Fehler behandelt.
6. Dekoratoren für View-Funktionen
Neben @app.route unterstützt Flask auch andere Dekoratoren, um komplexere Funktionalität zu implementieren.
Beispiel:
@app.before_requestFunktionen, die vor der Verarbeitung jeder Anfrage ausgeführt werden.@app.after_requestFunktionen, die nach der Verarbeitung jeder Anfrage ausgeführt werden.@app.teardown_requestFunktionen, die nach Beendigung der Anfrage ausgeführt werden und zur Bereinigung dienen.
Beispielhafte Dekoratorverwendung:
Beispiel
def before_request():
print('Before request')
@app.after_request
def after_request(response):
print('After request')
return response
@app.teardown_request
def teardown_request(exception):
print('Teardown request')
7. Von View-Funktionen zurückgegebene Statuscodes
View-Funktionen können nicht nur Inhalte zurückgeben, sondern auch HTTP-Statuscodes angeben.
Beispiel
def status():
return 'Everything is OK', 200
Das Zurückgeben des Statuscodes 200 zeigt eine erfolgreiche Anfrage an.
Geben Sie ein Antwortobjekt mit einem Statuscode zurück:
Beispiel
@app.route('/error')
def error():
return Response('An error occurred', status=500)
Das Zurückgeben des Statuscodes 500 zeigt einen internen Serverfehler an.
Weitere Erweiterungen