수색…


기본 경로

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_postpost_id 에 기본값 None 을 지정해야합니다. 첫 번째 경로가 일치하면 뷰 기능에 전달할 값이 없습니다.

또한 기본적으로 변수 규칙의 유형은 문자열입니다. 그러나 변수 접두사를 사용하여 intfloat 와 같은 여러 유형을 지정할 수 있습니다.

@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

requestflask 패키지에 있습니다. 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'


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow