[python] 플라스크에 선택적 URL 매개 변수가있을 수 있습니까?

플라스크 URL 선택적 매개 변수를 직접 선언 할 수 있습니까?

현재 다음과 같은 방법으로 진행 중입니다.

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

이것이 username선택 사항 이라고 직접 말할 수 있습니까?



답변

다른 방법은 쓰는 것입니다

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

그러나 단일 경로를 작성하고 username선택 사항으로 표시 하고 싶습니까? 그 경우라면 가능하지 않다고 생각합니다.


답변

몇 달 전에 Audrius가 요리 한 것과 거의 동일하지만 파이썬에서 익숙한 방식으로 함수 헤드의 기본값으로 약간 더 읽기 쉽습니다.

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


답변

나처럼 Flask-Restful을 사용하는 경우 다음과 같은 방법으로도 가능합니다.

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

그런 다음 리소스 클래스에서

class UserAPI(Resource):

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


답변

@user.route('/<userId>/')  # NEED '/' AFTER LINK
@user.route('/<userId>/<username>')
def show(userId, username=None):
    pass

https://flask.palletsprojects.com/en/1.1.x/quickstart/#unique-urls-redirection-behavior


답변

@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
    return 'You want path: %s' % path

http://flask.pocoo.org/snippets/57/


답변

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


답변

Skornos와 거의 동일하지만보다 명확한 답변을 위해 변수 선언이 있습니다. Flask-RESTful 확장 과 함께 사용할 수 있습니다 .

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

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

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

if __name__ == '__main__':
    app.run()

add_resource방법을 사용하면 여러 URL을 전달할 수 있습니다. 각각은 귀하의 리소스 로 라우팅됩니다 .