Werkzeug는 웹 애플리케이션을 구축하는 데 사용할 수 있는 Python WSGI 도구 라이브러리입니다. Werkzeug 라이브러리의 일반적인 용도는 다음과 같습니다.
1. 간단한 웹 애플리케이션 만들기
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
return Response('Hello world')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 5000, application)
위의 예에서 애플리케이션 함수는 @Request.application 데코레이터를 사용하여 WSGI 애플리케이션으로 변환됩니다. 그런 다음 run_simple 함수를 사용하여 포트 5000에서 로컬로 애플리케이션을 실행합니다.
작업 결과:
2. 라우팅 및 보기 기능
from werkzeug.wrappers import Request, Response
from werkzeug.routing import Map, Rule
def hello_world(request):
return Response("Hello world")
url_map = Map([
Rule('/', endpoint='hello')
])
@Request.application
def application(request):
urls = url_map.bind_to_environ(request.environ)
endpoint, args = urls.match()
if endpoint == 'hello':
return hello_world(request)
return Response('Not Found', status=404)
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 5000, application)
위의 예에서는 Map 및 Rule 클래스를 사용하여 URL 라우팅 규칙을 정의한 다음 라우팅 규칙에 따라 애플리케이션 기능에서 해당 보기 기능을 실행합니다.
3. 요청 및 응답 객체
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
name = request.args.get('name', 'World')
response = Response(f'Hello, {name}!')
response.headers['Content-Type'] = 'text/plain'
return response
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 5000, application)
위의 예에서 요청 객체를 사용하여 URL 매개변수를 가져오고 응답 객체를 사용하여 매개변수가 포함된 응답을 반환합니다.
4. 템플릿 엔진
from werkzeug.wrappers import Request, Response
from werkzeug.utils import import_string
from werkzeug.routing import Map, Rule
from werkzeug.exceptions import HTTPException
from jinja2 import Environment, FileSystemLoader
class Application:
def __init__(self, template_path='templates'):
self.url_map = Map([
Rule('/', endpoint='index'),
Rule('/hello/<name>', endpoint='hello')
])
self.template_env = Environment(loader=FileSystemLoader(template_path))
def render_template(self, template_name, **context):
template = self.template_env.get_template(template_name)
return Response(template.render(**context), content_type='text/html')
def index(self, request):
return self.render_template('index.html')
def hello(self, request, name):
return self.render_template('hello.html', name=name)
@Request.application
def __call__(self, request):
urls = self.url_map.bind_to_environ(request.environ)
try:
endpoint, args = urls.match()
view = getattr(self, endpoint)
return view(request, **args)
except HTTPException as e:
return e
if __name__ == '__main__':
from werkzeug.serving import run_simple
app = Application()
run_simple('localhost', 5000, app)
위의 예에서는 라우팅 및 보기 기능을 관리하기 위해 Application 클래스를 만들고 Jinja2 템플릿 엔진을 사용하여 HTML 템플릿을 렌더링했습니다.
이는 양식 처리, 파일 업로드, 쿠키 및 세션 관리 등과 같은 다른 많은 기능도 제공하는 Werkzeug 라이브러리의 일반적인 용도 중 일부에 불과합니다. 자세한 사용법 및 기능은 Werkzeug의 공식 문서를 참조할 수 있습니다.