수색…
기본 경로
Flask의 경로는 Flask 응용 프로그램 인스턴스의 route
데코레이터를 사용하여 정의 할 수 있습니다.
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello Flask'
route
데코레이터는 일치시킬 URL 인 문자열을 사용합니다. 이 문자열과 일치하는 URL에 대한 요청이 응용 프로그램에 수신되면 데코 레이팅 된 기능 ( 보기 기능 이라고도 함)이 호출됩니다. 그래서 우리가 가질 수있는 경로에 대해 :
@app.route('/about')
def about():
return 'About page'
이러한 경로는 Django에있는 것처럼 정규 표현식이 아니라는 점에 유의해야합니다.
변수 규칙 을 정의하여 URL 세그먼트 값을 변수로 추출 할 수도 있습니다.
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id):
# look up the blog post with id post_id
# return some kind of HTML
여기에서 변수 규칙은 URL의 마지막 세그먼트에 있습니다. URL의 마지막 세그먼트에있는 값은 post_id
매개 변수로보기 함수 ( get_blog_post
)에 전달됩니다. 따라서 /blog/posts/42
대한 요청은 ID가 42 인 블로그 게시물을 검색 (또는 검색하려고 시도)합니다.
또한 URL을 재사용하는 것이 일반적입니다. 예를 들어 /blog/posts
에 모든 블로그 게시물 목록을 반환하고 싶을 수 있습니다. 그래서 우리는 같은 view 함수를위한 두 개의 경로를 가질 수 있습니다 :
@app.route('/blog/posts')
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id=None):
# get the post or list of posts
여기서는 get_blog_post
의 post_id
에 기본값 None
을 지정해야합니다. 첫 번째 경로가 일치하면 뷰 기능에 전달할 값이 없습니다.
또한 기본적으로 변수 규칙의 유형은 문자열입니다. 그러나 변수 접두사를 사용하여 int
및 float
와 같은 여러 유형을 지정할 수 있습니다.
@app.route('/blog/post/<int:post_id>')
Flask에 내장 된 URL 변환기는 다음과 같습니다.
string | Accepts any text without a slash (the default).
int | Accepts integers.
float | Like int but for floating point values.
path | Like string but accepts slashes.
any | Matches one of the items provided
uuid | Accepts UUID strings
정수로 변환 할 수없는 마지막 URL 세그먼트의 값으로 URL /blog/post/foo
를 방문하면 404 오류가 반환됩니다. 이는 /blog/post
있는 규칙과 마지막 세그먼트에 문자열이 없기 때문에 올바른 작업입니다.
마지막으로 HTTP 메소드를 허용하도록 라우트를 구성 할 수 있습니다. route
데코레이터는 methods
키워드 인수를 취합니다.이 인수는이 라우트에 허용되는 HTTP 메소드를 나타내는 문자열 목록입니다. 가정했듯이 기본값은 GET
입니다. 새 블로그 게시물을 추가 할 양식이 있고 GET
요청에 대한 HTML을 반환하고 POST
요청에 대한 양식 데이터를 구문 분석하려면 경로가 다음과 같이 보일 것입니다.
@app.route('/blog/new', methods=['GET', 'POST'])
def new_post():
if request.method == 'GET':
# return the form
elif request.method == 'POST':
# get the data from the form values
request
은 flask
패키지에 있습니다. methods
키워드 인수를 사용할 때 우리는 받아 들일 HTTP 메소드에 대해 명시 적이어야합니다. POST
만 나열했다면 경로는 더 이상 GET
요청에 응답하지 않고 405 오류를 반환합니다.
캐치 올 경로
경로를 기반으로 복잡한 논리를 직접 처리하는 하나의 포괄적 인보기를 갖는 것이 유용 할 수 있습니다. 이 예에서는 두 가지 규칙을 사용합니다. 첫 번째 규칙은 특별히 /
catch하고 두 번째 규칙은 기본 제공 path
변환기를 사용하여 임의의 경로를 포착합니다. path
변환기는 모든 문자열 (슬래시 포함)과 일치합니다. Flask 변수 규칙을 참조하십시오.
@app.route('/', defaults={'u_path': ''})
@app.route('/<path:u_path>')
def catch_all(u_path):
print(repr(u_path))
...
c = app.test_client()
c.get('/') # u_path = ''
c.get('/hello') # u_path = 'hello'
c.get('/hello/stack/overflow/') # u_path = 'hello/stack/overflow/'
라우팅 및 HTTP 메소드
기본적으로 경로는 GET
요청에만 응답합니다. routes route()
데코레이터에 methods
인수를 제공하여이 동작을 변경할 수 있습니다.
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()
사용 된 HTTP 메소드에 따라 동일한 기능을 다른 엔드 포인트에 맵핑 할 수도 있습니다.
@app.route('/endpoint', methods=['GET'])
def get_endpoint():
#respond to GET requests for '/endpoint'
@app.route('/endpoint', methods=['POST', 'PUT', 'DELETE'])
def post_or_put():
#respond to POST, PUT, or DELETE requests for '/endpoint'