папка) и префикс URL на ' ' (пустой), чтобы позволить URL / отображать файл
index.html.
В функции run() установка параметра debug=True активизирует также автомати-
ческую перезагрузку, тогда как фреймворк Bottle для отладки и перезагрузки ис-
пользует отдельные аргументы.
Сохраните этот код в файл flask1.py:
from flask import Flask
app = Flask(__name__, static_folder='.', static_url_path='')
@app.route('/')
def home():
return app.send_static_file('index.html')
@app.route('/echo/<thing>')
def echo(thing):
return "Say hello to my little friend: %s" % thing
app.run(port=9999, debug=True)
Далее запустите сервер из терминала или окна:
$ python flask1.py
Протестируйте домашнюю страницу, введя в браузер следующий URL:
http://localhost:9999/
Вы должны увидеть следующее (как и в случае с Bottle):
My new and improved home page!!!
Попробуйте обратиться к конечной точке /echo:
http://localhost:9999/echo/Godzilla
Вы должны увидеть следующее:
Say hello to my little friend: Godzilla
270
Глава 9. Распутываем Всемирную паутину
Есть еще одно преимущество установки параметра debug равным True при вы-
зове метода run. Если в серверном коде генерируется исключение, Flask возвраща-
ет особую отформатированную страницу, содержащую полезные сведения о том,
что и где пошло не так. Даже больше: вы можете вводить команды, чтобы увидеть
значения переменных в программе сервера.
Не устанавливайте параметр debug = True на производственных веб-серверах. Это предо-
ставит потенциальным злоумышленникам слишком много информации о вашем сервере.
До сих пор примеры с использованием Flask повторяли то, что мы делали с по-
мощью фреймворка Bottle. Что такого может делать Flask, чего не может делать
Bottle? Flask содержит jinja2 — более широкую систему шаблонов. Рассмотрим
небольшой пример одновременного использования jinja2 и flask.
Создайте папку templates и файл flask2.html внутри нее:
<html>
<head>
<title>Flask2 Example</title>
</head>
<body>
Say hello to my little friend: {{ thing }}
</body>
</html>
Далее мы напишем серверный код, который получает этот шаблон, заполняет
значение аргумента thing, который мы передаем, и отрисовывает его как HTML