목차
Flask Redirect, Abort 함수(Function)이란?
redirect 의 기능은 응답 객체를 보내고 사용자(Client)를 원하는 위치로 이동 시켜 줍니다. 함수 사용방법은 아래와 같습니다.
redirect(location, statuscode, response)
- location : 보내고자 하는 위치
- statuscode : 300번대 응답 코드 Default는 302번
- response : 응답(Response) 시작에 필요한 파라미터
redirect를 일반적으로 url_for와 함께 사용하여 원하는 위치의 함수를 실행 해 줍니다. HTTP status code의 경우 3xx 번의 코드를 보낼 수 있습니다. 3XX는 Redirect 관련 응답입니다.
Default로 사용되는 302번의경우 영구 이동으로 바로 해당 페이지로 이동 시켜 줍니다. 그 외의 응답코드는 아래와 같습니다.
- 300 : 여러 선택항목
- 301 : 영구 이동
- 302 : 임시 이동
- 303 : 기타 위치 보기
- 304 : 수정되지 않음
- 305 : 프록시 사용
- 307 : 임시 리다이렉션
- 308 : 영구 리다이렉션, RFC에서 실험적으로 승인됨
Flask Abort 함수(Function)란?
Abort 함수는 4XX 번대 HTTP Status Code 를 보내는 응답입니다.
abort(code)
사용은 위와 같이 code 번호만 넣으면 됩니다.
400번대 코드는 종류가 많아 주로 사용되는 항목만 아래와 같이 정리 하였습니다.
- 400 : 잘못된 요청
- 401 : 권한 없음
- 403 : Forbidden, 금지됨
- 404 : Not Found, 찾을 수 없음
- 406 : 허용되지 않음
- 415 : 지원되지 않는 미디어 유형
- 429 : 너무 많은 요청, RFC 6585
Flask Redirect, Abort 함수 사용하여 HTTP 상태코드 보내기 예제
파이썬 코드>>
from flask import Flask, redirect, url_for, request, abort, render_template
app = Flask(__name__)
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
if request.form['id'] == 'james':
return redirect(url_for('admin'))
else:
return redirect(url_for('not_james'),300)
else:
return render_template('login.html')
@app.route('/failed')
def not_james():
abort(400)
@app.route('/main')
def admin():
return 'You Must be James'
if __name__ == '__main__':
app.run(debug = True, port=9999)
7~8번 라인 : james 라는 아이디 값이 들어 올 경우 19번 줄의 admin()을 실행합니다.
10번 라인 : james라는 아이디가 아닐 경우 300번의 status 코드와 함께 not_james()를 실행합니다.
16번 라인 : abort 함수를 사용해서 400번 상태 코드를 전달 합니다.
login.html>>
<!DOCTYPE html>
<html lang="en">
<head>
<title>scribblinganything.tistory.com</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container-sm">
<form action = "http://localhost:9999/login" method = "post">
<input type="text" class="form-control " id="id" placeholder="id" name="id">
<label for="아이디">아이디</label>
<input type="text" class="form-control" id="pw" placeholder="pw" name="pw">
<label for="pw">비밀번호</label>
<button type="submit" class="btn btn-primary" style="float:right;" id="login">로그인</button>
</form>
</div>
</body>
</html>
결과>>
크롬브라우져(Chrome Browser)를 사용해서 위와 같이 302번의 Status Code가 정상적으로 들어왔음을 알 수 있습니다.
이번에는 James가 아닌 아이디를 입력한 경우 입니다.
이번에는 코드에서 설정 한대로 300번의 상태 코드가 발생하였습니다.
그리고 페이지는 Redirecting 상태로대기하고 있습니다. /failed 를 클릭하면 아래와 같이 error 코드(Bad Request)가 발생합니다.
상태 코드도 400번으로 정상적으로 나옵니다.
'파이썬(Python) > Flask' 카테고리의 다른 글
[Python] Flask로 파일 업로드 웹페이지 만들기(werkzeug, files, upload) (6) | 2021.11.27 |
---|---|
[Python] Flask 메세지창 만들기(로그인페이지 예제) (Alert, Flashing, Popup) (0) | 2021.11.26 |
[Python] 세션(Session)이란? flask에서 구현해보기(jinja2사용) (0) | 2021.11.24 |
[Python] Flask, Jinja2 form데이터 출력하기(for문, bootstrap 사용) (0) | 2021.11.20 |
[Python] Flask와 Jinja2 사용하여 데이터 주고 받기 (0) | 2021.11.19 |