사실 나는 Python 웹 프레임워크중에 장고만 써봤지 Flask는 한번도 안써봤다. 근데 뭐 내생각에는 그냥 테스트용 또는 빠르게 웹 개발이 필요할 때 써먹을만 한거 같다. 노드와 비슷하게 라우팅을 바로바로 함수에 덧붙이다보니 해당 부분은 가시성이 있는데, 이게 파이썬이다 보니 아무리 깔끔하게 짜도 막상 다시보면 더럽다.... 내가 만들때까지만 개편함...
오늘은 그 중에서도 Blueprint 라는 라이브러리를 이용해서 라우팅 하는 방법을 정리해보고자 한다.
우선 어떤 상황에서 써먹을지 생각해보자. 우리는 아래와 같은 라우팅 경로가 필요하다고 가정해보자
/admin/bintoascii
/admin/asciitobin
/admin/hextobin
/admin/bintohex
/user/jpgtopdf
/user/pdftojpg
/user/pngtojpg
/tester/newtest
/tester/xxx
/tester/yyy
위와 같은 라우팅 경로가 필요할 때, 물론 하나하나 직접 만들어 주는 방법도 있다.
admin 폴더를 만들어서 그 안에 관련 함수를 라우팅하는 파이썬파일 하나 만들고, 해당 라우팅을 통해 실제 서비스 동작을 하는 파이썬파일만들고... 뭐 이런식으로도 충분히 만들 수 있다. 근데 뭐든 유지보수와 비슷한건 한곳에서 묶어서 관리하는게 낫지 않은가?
그래서 blueprint를 사용한다.
그러면 이제 각 url_prefix 마다 묶어줄 준비를 한다. (project/views/admin.py)
from flask import Blueprint
tie = Blueprint('main',__name__,urlprefix='/admin')
@tie.route('/bintoascii')
def bintoas():
return 'hello this is bintoascii function'
이렇게 admin.py 로 만들던 무튼 prefix 마다 묶어준다.
그리고 다음 단계에서 위에 만든 Blueprint를 등록한다.
뭐 보통 __init__.py 또는 app.py에 등록하는거 같다. 사실 나도 플라스크 첨이라 어디 등록하는지 확실히 모르겠다. 앱을 실행시키는 곳에 등록하는 거 같음 ^^;;
(project/app.py)
from flask import Flask
def create_app():
app = Flaks(__name__)
from .views import admin
app.register_blueprint(admin.tie)
return app
앗 완성이다.
이제 등록해준대로 웹 페이지에 접속하면 정상적으로 라우팅이 나눠지는걸 확인할 수 있다.
그래도 난 플라스크로 너무 큰 웹을 만드는건 비추다... 내가 소스코드 진단 업무하면서 진짜 php 급으로 코드가 뭔가 더럽다... 가독성이 없다고 해야하나.... 자바가 그리울지경... 물론 뭐 고수가 보면 아닐수도 있겠지만....
'Technical Docs > Web Application' 카테고리의 다른 글
XSS 방어하기 (0) | 2022.08.04 |
---|---|
Burp : Host header authentication bypass (0) | 2022.07.18 |
DOM Invader (Burp Suite) (0) | 2022.06.23 |
CVE-2022-26134 Confluence 취약점 (내용추가) (0) | 2022.06.03 |
Source Map 이 뭘까요~ (0) | 2022.06.01 |