플라스크 앱에 정의된 모든 경로 목록 가져오기
저는 복잡한 플라스크 기반의 웹 앱을 가지고 있습니다.보기 기능이 있는 별도의 파일이 많이 있습니다.해당 URL은 다음을 사용하여 정의됩니다.@app.route('/...')
장식가제 앱 전체에서 선언된 모든 경로의 목록을 얻을 수 있는 방법이 있나요?아마도 제가 전화할 수 있는 방법이 있을 것입니다.app
목적어?
응용 프로그램의 모든 경로는 의 인스턴스에 저장됩니다. 다음 방법을 사용하여 인스턴스를 반복할 수 있습니다.
from flask import Flask, url_for
app = Flask(__name__)
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
@app.route("/site-map")
def site_map():
links = []
for rule in app.url_map.iter_rules():
# Filter out rules we can't navigate to in a browser
# and rules that require parameters
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
# links is now a list of url, endpoint tuples
자세한 내용은 만들어진 새 웹 페이지에 대한 링크 표시를 참조하십시오.
방금 같은 질문을 받았습니다.위의 솔루션은 너무 복잡합니다.프로젝트 아래에서 새 셸을 열기만 하면 됩니다.
>>> from app import app
>>> app.url_map
첫 번째 '앱'은 제 프로젝트 스크립트인 app.py 이고, 다른 하나는 제 웹의 이름입니다.
(이 솔루션은 경로가 약간 있는 작은 웹을 위한 것입니다)
나는 나의 위에서 도우미 방법을 만듭니다.manage.py
:
@manager.command
def list_routes():
import urllib
output = []
for rule in app.url_map.iter_rules():
options = {}
for arg in rule.arguments:
options[arg] = "[{0}]".format(arg)
methods = ','.join(rule.methods)
url = url_for(rule.endpoint, **options)
line = urllib.unquote("{:50s} {:20s} {}".format(rule.endpoint, methods, url))
output.append(line)
for line in sorted(output):
print line
더미 옵션 집합을 구축하여 누락된 인수를 해결합니다.출력은 다음과 같습니다.
CampaignView:edit HEAD,OPTIONS,GET /account/[account_id]/campaigns/[campaign_id]/edit
CampaignView:get HEAD,OPTIONS,GET /account/[account_id]/campaign/[campaign_id]
CampaignView:new HEAD,OPTIONS,GET /account/[account_id]/new
그런 다음 실행:
python manage.py list_routes
관리에 대한 더 많은 정보.파이 체크아웃: http://flask-script.readthedocs.org/en/latest/
0.11 버전부터 플라스크에는 CLI가 내장되어 있습니다.기본 제공 명령 중 하나는 다음 경로를 나열합니다.
FLASK_APP='my_project.app' flask routes
조나단의 대답과 비슷하게 저는 대신 이것을 하기로 결정했습니다.url_for를 사용하는 것이 의미가 없다고 생각합니다. 만약 당신의 주장이 float과 같은 문자열이 아니라면 그것은 깨질 것이기 때문입니다.
@manager.command
def list_routes():
import urllib
output = []
for rule in app.url_map.iter_rules():
methods = ','.join(rule.methods)
line = urllib.unquote("{:50s} {:20s} {}".format(rule.endpoint, methods, rule))
output.append(line)
for line in sorted(output):
print(line)
플라스크 프로젝트가 있는 디렉토리에서 cli 명령을 사용합니다.
flask routes
명령줄을 실행해야 한다고 지정하지 않았기 때문에 대시보드 또는 기타 비명령줄 인터페이스의 경우 json에서 다음을 쉽게 반환할 수 있습니다.어쨌든 결과와 결과는 디자인 관점에서 혼합되어서는 안 됩니다.그것은 작은 프로그램이라도 나쁜 프로그램 디자인입니다.그런 다음 아래의 결과를 웹 응용 프로그램, 명령줄 또는 json을 수집하는 다른 모든 프로그램에 사용할 수 있습니다.
또한 각 경로와 관련된 파이썬 함수를 알아야 한다고 지정하지 않았기 때문에, 이것은 당신의 원래 질문에 더 정확하게 답합니다.
아래를 사용하여 직접 모니터링 대시보드에 출력을 추가합니다.사용 가능한 경로 방법(GET, POST, PUT 등)을 원하는 경우 위의 다른 답변과 결합해야 합니다.
규칙의 repr()은 경로에서 필요한 인수를 변환합니다.
def list_routes():
routes = []
for rule in app.url_map.iter_rules():
routes.append('%s' % rule)
return routes
목록 이해를 사용하는 것과 동일한 것:
def list_routes():
return ['%s' % rule for rule in app.url_map.iter_rules()]
샘플 출력:
{
"routes": [
"/endpoint1",
"/nested/service/endpoint2",
"/favicon.ico",
"/static/<path:filename>"
]
}
보기 기능 자체에 액세스해야 하는 경우 대신app.url_map
사용하다
예제 스크립트:
from flask import Flask
app = Flask(__name__)
@app.route('/foo/bar')
def route1():
pass
@app.route('/qux/baz')
def route2():
pass
for name, func in app.view_functions.items():
print(name)
print(func)
print()
위 스크립트를 실행한 결과:
static
<bound method _PackageBoundObject.send_static_file of <Flask '__main__'>>
route1
<function route1 at 0x128f1b9d8>
route2
<function route2 at 0x128f1ba60>
(플라스크에서 자동으로 생성되는 "정적" 경로가 포함되어 있습니다.)
FLASK_APP 환경변수를 내보내거나 설정한 후 다음 명령을 실행하면 모든 Routes via 플라스크 쉘을 볼 수 있습니다. flask shell app.url_map
플라스크 앱에서 다음을 수행합니다.
flask shell
>>> app.url_map
Map([<Rule '/' (OPTIONS, HEAD, GET) -> helloworld>,
<Rule '/static/<filename>' (OPTIONS, HEAD, GET) -> static>])
print(app.url_map)
즉, 플라스크 애플리케이션 이름이 'app'인 경우입니다.
플라스크 앱 인스턴스의 속성입니다.
https://flask.palletsprojects.com/en/2.1.x/api/ #flask.Flask.url_map을 참조하십시오.
언급URL : https://stackoverflow.com/questions/13317536/get-list-of-all-routes-defined-in-the-flask-app
'programing' 카테고리의 다른 글
캐시 VS 세션 VS 쿠키? (0) | 2023.06.09 |
---|---|
stdin에서 암호 읽기 (0) | 2023.06.09 |
Visual Studio 웹 사이트에서 디버깅할 때 https로 리디렉션 중 (0) | 2023.06.09 |
파이어베이스:이 도메인은 인증되지 않았습니다. (0) | 2023.06.09 |
EPLUS를 사용한 식에 의한 조건부 포맷 (0) | 2023.06.09 |