файл как flask3b.py):
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/echo/')
def echo():
thing = request.args.get('thing')
272
Глава 9. Распутываем Всемирную паутину
place = request.args.get('place')
return render_template('flask3.html', thing=thing, place=place)
app.run(port=9999, debug=True)
Запустите новый сценарий сервера:
$ python flask3b.py
В этот раз используйте следующий URL:
http://localhost:9999/echo?thing=Gorgo&place=Wilmerding
Вы должны увидеть следующее:
Say hello to my little friend: Gorgo. Alas, it just destroyed Wilmerding!
Когда команда GET используется в URL, любые аргументы должны передавать-
ся в формате &key1=val1&key2=val2&...
Вы также можете использовать оператор словаря **, чтобы передать несколько
аргументов в шаблон с помощью одного словаря (назовите файл flask3c.py):
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/echo/')
def echo():
kwargs = {}
kwargs['thing'] = request.args.get('thing')
kwargs['place'] = request.args.get('place')
return render_template('flask3.html', **kwargs)
app.run(port=9999, debug=True)
**kwargs действует как конструкция thing=thing, place=place. Используя этот
словарь, можно сэкономить немного времени, если входных аргументов много.
Язык шаблонов jinja2 способен на гораздо большее. Если вы работали на PHP,
то увидите много похожих возможностей.
Веб-серверы, не использующие Python
До этого момента мы использовали простые веб-серверы: http.server из стандарт-
ной библиотеки или сервера отладки Bottle и Flask. На производстве вам нужно
запускать код на более быстрых серверах. Как правило, вы выбираете один из сле-
дующих вариантов:
Apache с модулем mod_wsgi;
Nginx с сервером приложений uWSGI.
Оба они работают хорошо: Apache, скорее всего, более популярен, а у Nginx
имеется репутация стабильного и тратящего меньше памяти сервера.
Веб-серверы
273
Apache
Лучшим WSGI-модулем Apache (http://httpd.apache.org/) является mod_wsgi (https://
code.google.com/p/modwsgi/). Он может запускать код, написанный на Python, внут-
ри процесса Apache или в отдельном процессе, который обменивается данными