티스토리 뷰

라우팅 (routing)

📕 주소를 입력해서 들어온 요청을 담당하는 담당자는 함수이고, 요청을 연결하는 작업을 라우팅이라고 한다.

@app.route('/')
def Index():
	return 'Index Page'

데코레이터 route

 


변수 규칙

📕 주소에서 가변적인 부분을 변수라고 한다.

변수를 사용할 땐 <variable_name>처럼 쓰고, 형변환이 필요할 땐 <converter:variable_name> 앞에 자료형을 써준다.

변수를 받아내는 매커니즘이 함수의 매개변수로 전달된다. (변수와 매개변수는 같은 이름이어야 함.)

@app.route('/user/<username>/')
def user_profile(username):
    print(username)
    return 'User ' + username

@app.route('/post/<int:post_id>/')
def show_post(post_id):
    return 'Post ' + post_id

후행 슬래시 (trailing slash)

파일시스템과 비슷하게   / 가 있으면 디렉터리, 없으면 파일을 의미한다.

 

  •  URL에 후행 슬래시가 있을 때, 후행 슬래시를 쓰지 않아도 자동으로 붙여서 리다이렉트 한다.
@app.route('/projects/')
def projects():
    return 'The project page'
  • URL에 후행 슬래시가 없을 때, /about/about/은 각각 파일과 디렉터리로 구분하므로 디렉터리로 검색 시 오류가 발생한다.
@app.route('/about')
def about():
    return 'The about page'

URL 구축

📕 url_for( )은 url 주소값을 가져오는 함수이다. 매개변수로 함수명을 넣으면 해당 route의 url 주소를 가져온다.

from flask import url_for

@app.route('/')
def Index():
	return 'Index Page'

@app.route('/create/')
def create():
	return 'Create'

@app.route('/read/<read_id>/')
def read(read_id):
	return 'Read '+read_id

with app.test_request_context():
    print(url_for('Index')) # /
    print(url_for('create')) # /create/
    print(url_for('create', next='/')) # /create/?next=%2F
    print(url_for('read', read_id=1000)) # /read/1000/

HTTP 메소드

get 방식

📕 데이터가 URL 안에 포함되어있고, URL을 통해 서버를 전송하는 방식 (읽어올 때 씀)

동적 웹서비스에서 특정 페이지를 식별하는 고유한 주소로 사용되는 것이 get 방식 -> 같은 URL를 입력하면 같은 정보를 get할 수 있음

 post방식

📕 URL주소에 포함되지 않고 은밀하게 서버로 전송하는 방식 (값을 변경할 때 씀)

변경하려고 하는데 URL에 정보가 있으면 주소로 이동한 순간 정보가 추가되므로 post 방식을 사용

 

http method

서버로 전송된 데이터가 POST인 경우 route가 허용해줘야 하기 때문에 methods=['GET', 'POST']를 추가한다.

@app.route('/create/', methods=['GET','POST'])
def create():
	return f'''
    <form action="/create/" method="POST">
        <p><input type="text" name="title" placeholder="title"></p>
        <p><textarea type="body" name="body" placeholder="body"></textarea></p>
        <p><input type="submit" value="create"></p>
    </form>
    '''

GET과 POST의 출력화면을 다르게 하려면 request를 사용해서 식별해주면 된다.

from flask import request

@app.route('/create/', methods=['GET', 'POST'])
def create():
    if request.method == 'POST':
        return 'POST'
    elif request.method == 'GET':
        return 'GET'

 

참고

https://flask.palletsprojects.com/en/2.1.x/quickstart/#quickstart

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday