Benutzerdefiniertes Routing in Flasche App

Ich habe versucht zu verstehen, wie man dynamische Flask-URLs generiert. Ich habe die docs und mehrere Beispiele gelesen, aber kann nicht herausfinden, warum dieser Code nicht funktioniert:

path = 'foo' @app.route('/<path:path>', methods=['POST']) def index(path=None): # do some stuff... return flask.render_template('index.html', path=path) 

Ich würde erwarten, dass meine index.html Vorlage zu /foo serviert wird, aber es ist nicht. Ich bekomme einen Build-Fehler. Was vermisse ich?

Wenn ich einen festen weg benutze, wie /bar , funktioniert alles ohne problem.

@app.route('/bar', methods=['POST'])

  • Gibt es eine einfache Möglichkeit, mit dem Statuscode 429 abzubrechen?
  • Flasche App hängt bei der Bearbeitung der Anfrage
  • Flasche globale Variablen und Sitzungen
  • Flasche - Lauffunktion jede Stunde
  • Python-Flasche und wie man Code in einer Webseite zeigt
  • Erhalten Sie eine Liste aller in der App definierten Routen
  • 2 Solutions collect form web for “Benutzerdefiniertes Routing in Flasche App”

    Du hast schon lange und knapp davon. Alles, was Sie tun müssen, ist, Ihre View-Funktionen mit der /<var> Syntax (oder die /<converter:var> Syntax, wo angemessen) zu dekorieren.

     from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/<word>', defaults={'word': 'bird'}) def word_up(word): return render_template('whatstheword.html', word=word) @app.route('/files/<path:path>') def serve_file(path): return send_from_directory(app.config['UPLOAD_DIR'], path, as_attachment=True) if __name__ == '__main__': app.debug = True app.run(port=9017) 

    Wenn Flask eine Variable aus einer URL für eine dynamische Route zieht, wie du es versuchst zu verwenden, wird es standardmäßig eine Unicode-Zeichenfolge in Python sein. Wenn Sie die Variable mit den <int:var> oder <float:var> -Wandlern erstellen, wird sie für Sie in den entsprechenden Typ umgewandelt.

    Der <path:blah> Konverter wird auf einen String passen, der Schrägstriche ( / ) enthält, also kannst du /blah/dee/blah passieren und die Pfadvariable in deiner Ansichtsfunktion enthält diesen String. Ohne den Pfadwandler zu benutzen, würde die Flasche versuchen, Ihre Anfrage an eine auf der Route /blah/dee/blah registrierte Ansichtsfunktion zu versenden, da die Ebene <var> durch die nächste / im uri abgegrenzt wird.

    Also, wenn ich meine kleine App betrachte, würde die /files/<path:path> route jedem beliebigen Dateisoftware dienen, der dem vom Benutzer auf der Anfrage gesendeten Pfad entspricht. Ich habe dieses Beispiel aus den docs hier gezogen .

    Außerdem graben Sie, dass Sie die Vorgaben für Ihre Variablen-URLs über ein Keyword arg an den route() decorator angeben können.

    Wenn Sie möchten, können Sie sogar auf die zugrunde liegende url_map , die Werkzeug aufbaut, basierend darauf, wie Sie Ihre View-Funktionen und Routen in Ihrem App-Raum angeben. Für mehr Zeug zu kauen, schauen Sie sich die api docs auf URL-Registrierungen.

    Sie können add_url_rule() :

     def index(path=None): return render_template('index.html', path=path) path = '/foo' app.add_url_rule(path, 'index', index) 

    Du möchtest vielleicht auch auf Blaupause-Objekte schauen , wenn du das am Ende machst.

    Python ist die beste Programmiersprache der Welt.