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_resource
method는 패스 배수의 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)
예시와 같이 쓸 수 있지만 빌드 오류가 발생할 수 있습니다.
이 문제를 해결하려면:
- root.py에 app.url_map()을 인쇄합니다.
- 다음과 같이 표시됩니다.
<Rule '/<userId>/<username>' (HEAD, POST, OPTIONS, GET) -> user.show_0>
그리고.
<Rule '/<userId>' (HEAD, POST, OPTIONS, GET) -> .show_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
'programing' 카테고리의 다른 글
MySQL 쿼리 쉼표로 구분된 문자열에서 값 찾기 (0) | 2022.10.29 |
---|---|
PHP 문자열에서 악센트를 제거하려면 어떻게 해야 합니까? (0) | 2022.10.29 |
날짜를 일반 형식으로 인쇄하려면 어떻게 해야 합니까? (0) | 2022.10.29 |
PHP의 유형 조정 및 (엄격한) 크기/낮은 비교 (0) | 2022.10.29 |
2차원 배열을 선언하려면 어떻게 해야 합니까? (0) | 2022.10.29 |