programing

Flask는 URL 파라미터(옵션)를 사용할 수 있습니까?

firstcheck 2022. 10. 29. 14:39
반응형

Flask는 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가 요리한 것과 거의 비슷하지만, 함수 헤드의 디폴트 설정으로 조금 더 읽기 쉽다는 것을 알 수 있습니다.이것은 python에 익숙한 방법입니다.

@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')

a [Resource]클래스에서 다음을 수행합니다.

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/ #syslog-redirection-redirection-displays

@user.route('/<user_id>', defaults={'username': default_value})
@user.route('/<user_id>/<username>')
def show(user_id, username):
   #
   pass
@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
    return 'You want path: %s' % path

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

스콜노와 거의 비슷하지만 좀 더 명확한 답을 위해 가변 선언을 사용합니다.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_resourcemethod는 패스 배수의 URL을 허용합니다.각 파일이 리소스로 라우팅됩니다.

이 게시물이 오래되었다는 것은 알지만, 저는 플라스크_optional_routes라는 패키지를 작업했습니다.코드는 https://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)

예시와 같이 쓸 수 있지만 빌드 오류가 발생할 수 있습니다.

이 문제를 해결하려면:

  1. root.py에 app.url_map()을 인쇄합니다.
  2. 다음과 같이 표시됩니다.

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

그리고.

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

  1. 템플릿에서 할 수 있는 것보다{{ url_for('.show_0', args) }}그리고.{{ url_for('.show_1', args) }}

Flask 0.10은 하나의 엔드포인트에 여러 루트를 추가할 수 없습니다.하지만 가짜 엔드포인트를 추가할 수 있습니다.

@user.route('/<userId>')
def show(userId):
   return show_with_username(userId)

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

청사진을 사용하시면 코드를 더 깔끔하고 보기 좋게 만들 수 있을 것 같습니다.

예:

from flask import Blueprint

bp = Blueprint(__name__, "example")

@bp.route("/example", methods=["POST"])
def example(self):
   print("example")

언급URL : https://stackoverflow.com/questions/14032066/can-flask-have-optional-url-parameters

반응형