가오리의 코딩일기
Ep02. 라우팅, 변수 규칙, 후행 슬래시, url 구축, http 메소드 본문
💡 라우팅(Routing)
→ 플라스크에서 함수는 각각의 주소를 입력해서 들어오는 요청을 담당하는 담당자
→ 어떤 요청을 어떤 함수가 응답할 것인가를 연결시켜주는 작업이 필요한데 이런 작업을 라우팅
→ 그런 작업을 기술하는 어떤 것을 라우터라고 한다
→ 데코레이터(장식자)를 사용해서 route() 함수에 URL을 바인딩한다
→ @로 시작하는 것들, 장식하는 도구, 함수를 장식한다고 해서 이런 이름이 붙었다
# 사용자가 어떤 경로를 입력하지 않고 접속하면 인덱스 함수가 응대하라고 담당자를 지정한 것
@app.route('/')
def index():
return 'Welcome!'
# /hi/<username>로 접속했을 때 hi() 함수가 응대해서 hi, {username}를 응답한다
@app.route('/hi/<username>')
def hi(username):
return f'Hi, {username}'
💡 변수 규칙(Variable Rules)
→ <>(꺽새)를 이용해 가변적으로 변하는 변수를 route()가 받기 위해서 쓰는 방법
→ 변수에 입력된 값과 같은 이름의 파라미터에 전달된다
→ 그러므로 변수명과 함수명의 파라미터 명이 동일해야 한다
💡 후행 슬래시(Trailing Slash)
# 슬래시가 있을 때
@app.route('/login/')
def login():
return 'The login page'
# 슬래시가 없을 때
@app.route('/logout')
def logout():
return 'the logout page'
💡 url 구축(URL Building)
→ 특정 함수에 대한 URL을 작성하려면 url_for() 함수를 사용하면 된다
→ 함수의 이름을 첫 번째 인수로, 키워드 인수의 수는 각각의 URL 규칙의 변수 부분에 해당한다.
✏️ 왜 템플릿에 하드코딩에 대신 반전 기능이 있는 url_for() 함수를 사용해서 URL을 작성할까?
→ 대분분의 경우 리버싱 함수는 하드코딩된 URL보다 가독성이 좋다
→ 하드코딩된 URL을 수동으로 변경하는 것을 기억할 필요없이 URL을 한 번에 변경할 수 있다
→ URL 작성은 특수 문자 및 유니코드 데이터의 이스케이프를 투명하게 처리한다
→ 생성된 경로는 항상 절대 경로이므로 브라우저에서 상대경로의 예기치 않은 동작이 발생하지 않는다
→ 응용 프로그램이 URL root 외부에 배치되어있는 경우 적절하게 처리를 도와준다.
with app.test_request_context():
print(url_for('index'))
print(url_for('hi', username='ryukyung'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('logout'))
💡 HTTP 메소드(HTTP Method)
→ 웹 애플리케이션은 URL에 엑세스할 때 다른 http methods를 사용한다
→ route()의 인수인 methods를 사용하여 다른 http methods를 처리할 수 있다
✏️ GET
→ URL을 통해 서버로 데이터를 전송하는 방식
→ 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용하는 것
ex) 게시판에서 글의 내용에 대한 목록을 보여주거나 글의 내용을 볼 때
✏️ POST
→ 서버 상의 데이터 값이나 상태를 바꾸기 위해 사용한다
ex) 게시판에서 글의 내용을 저장하고 수정할 때
@app.route('/create/', methods=['GET', 'POST'])
def create():
if request.method == 'GET':
content = '''
<form action="/create/" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p><input type="text" name="character" placeholder="character"></p>
<p><input type="submit" value="create"></p>
</form>
'''
return template(getContents(), content)
elif request.method == 'POST':
global nextId
title = request.form['title']
character = request.form['character']
newTopic = {'id': nextId, 'title': title, 'character': character}
topics.append(newTopic)
url = '/read/'+str(nextId)+'/'
nextId = nextId + 1
return redirect(url)
'Python > flask' 카테고리의 다른 글
Ep07. Flask로 첫 번째 HTTP API 구축하기 (0) | 2022.08.20 |
---|---|
Ep04. 블로그 웹 애플리케이션 개발(1) (0) | 2022.07.22 |
Ep03. 블로그 웹 애플리케이션 개발 (0) | 2022.07.15 |
Ep02. python DB API, sqlite3 (0) | 2022.07.10 |
Ep01 : 플라스크 개발 환경 설정하기 (0) | 2022.07.02 |