proyectos ejemplos python flask

python - ejemplos - django



¿Puede Flask tener parámetros de URL opcionales? (10)

¿Es posible declarar directamente un parámetro opcional de URL del matraz?

Actualmente estoy procediendo de la siguiente manera:

@user.route(''/<userId>'') @user.route(''/<userId>/<username>'') def show(userId, username=None): .................

¿Hay algo que me permita decir directamente que el "nombre de usuario" es opcional?


Casi lo mismo que Audrius cocinó hace algunos meses, pero es posible que le resulte un poco más legible con los valores predeterminados en el encabezado de la función, tal como está acostumbrado con Python:

@app.route(''/<user_id>'') @app.route(''/<user_id>/<username>'') def show(user_id, username=''Anonymous''): return user_id + '':'' + username


Creo que puedes usar Blueprint y eso hará que tu código se vea mejor y mejor.

ejemplo:

from flask import Blueprint bp = Blueprint(__name__, "example") @bp.route("/example", methods=["POST"]) def example(self): print("example")


Desde Flask 0.10 no puedes agregar múltiples rutas a un punto final. Pero puedes agregar un punto final falso

@user.route(''/<userId>'') def show(userId): return show_with_username(userId) @user.route(''/<userId>/<username>'') def show_with_username(userId,username=None): pass


Otra forma es escribir

@user.route(''/<user_id>'', defaults={''username'': None}) @user.route(''/<user_id>/<username>'') def show(user_id, username): pass

Pero supongo que quieres escribir una sola ruta y marcar el username como opcional. Si ese es el caso, no creo que sea posible.


Puede escribir como se muestra en el ejemplo, pero luego obtiene el error de compilación.

Para arreglar esto:

  1. imprima app.url_map () en su raíz .py
  2. Ves algo como:

<Rule ''/<userId>/<username>'' (HEAD, POST, OPTIONS, GET) -> user.show_0>

y

<Rule ''/<userId>'' (HEAD, POST, OPTIONS, GET) -> .show_1>

  1. que en la plantilla puedes {{ url_for(''.show_0'', args) }} y {{ url_for(''.show_1'', args) }}

Sé que esta publicación es muy antigua, pero trabajé en un paquete que hace esto llamado flask_optional_routes. El código se encuentra en: github.com/sudouser2010/flask_optional_routes .

from flask import Flask from flask_optional_routes import OptionalRoutes app = Flask(__name__) optional = OptionalRoutes(app) @optional.routes(''/<user_id>/<user_name>?/'') def foobar(user_id, user_name=None): return ''it worked!'' if __name__ == "__main__": app.run(host=''0.0.0.0'', port=5000)


Si está usando Flask-Restful como yo, también es posible de esta manera:

api.add_resource(UserAPI, ''/<userId>'', ''/<userId>/<username>'', endpoint = ''user'')

a luego en tu clase de Recursos:

class UserAPI(Resource): def get(self, userId, username=None): pass




@user.route(''/<user_id>'', defaults={''username'': default_value}) @user.route(''/<user_id>/<username>'') def show(user_id, username): # pass