В настоящее время существует множество фреймворков Python, упрощающих создание веб-приложений. Эти фреймворки организуют соответствующие модули, что позволяет быстрее создавать приложения, не обращая внимания на некоторые детали (такие как сокеты и протоколы), поэтому все, что нужно, есть в фреймворке. Далее мы рассмотрим различные варианты.
PythonВозникло в конце восьмидесятых годов. Разработано Centrum Wiskunde & InformaticaGuido van Rossum, исследовательский центр математики и информатики в Амстердамском научном парке в Нидерландах. С тех пор Ван Россум стал влиятельной фигурой в разработке Python. Фактически, члены сообщества дали ему почетный титул: Доброжелательный диктатор на всю жизнь (BDFL).
После своего скромного начала Python стал одним из самых популярных серверных языков программирования в Интернете. Согласно W3Techs, он используется вМного сайтов с высокой посещаемостью, превосходя ColdFusion, PHP,и ASP.NET. Более 98% этих сайтов работают на Python 2.0, и чуть более 1% — на версии 3.0.
Фреймворки упрощают разработку
Сегодня существует большое количествоФреймворк Python, они могут упростить разработку веб-приложений. Эти фреймворки объединяют разные модули вместе, позволяя вам быстрее создавать программы, не обращая внимания на некоторые детали (такие как сокеты и протоколы), фреймворк предоставляет все необходимые функции.
В первой части серии, состоящей из двух частей, мы рассмотрим некоторые из самых популярных фреймворков Python. В то время как большинство современных веб-фреймворков работают на стороне сервера, некоторые фреймворки начинают экспериментировать с кодом на стороне клиента, который может работать на стороне клиента (например, Skulpt и Trinket). Фреймворки Python обычно делятся на фреймворки с полным стеком и фреймворки без полного стека.полная структура стекаРазрабатывайте все технологии от взаимодействия с пользователем до базы данных, фреймворки не с полным стеком не содержат всех технологий всей разработки.
Кроме того, есть микрофреймворк, который тоже не является фулстековым фреймворком, но более легким. В некоторых случаях больше подходит микрофреймворк, а иногда подходит фулстек фреймворк. Во второй части статьи мы проведем сравнение между фреймворками полного стека и микрофреймворками.
Django
DjangoВероятно, самый представительный фреймворк Python. Это платформа с открытым исходным кодом, которая следует архитектурному шаблону MMVC. Он получил свое название от Джанго Рейнхардта, французского композитора и гитариста, которого многие считают величайшим гитаристом в истории. В газете Lawrence Journal-World в Лоуренс-Сити, штат Канзас, работают два программиста, Адриан Головати и Саймон Уиллисон, которые разработали Django в 2003 году для разработки веб-программ для газет.
Django имеет встроенный механизм шаблонов, а также поддерживает популярный механизм Jinja2 через OOTB. Он также поддерживает регулярное распространение URL-адресов и может выполнять сложные сопоставления с помощью простых URL-адресов.
Одним из преимуществ Django является то, что для его установки требуется только отдельный установочный пакет. Некоторые другие подобные фреймворки требуют загрузки большого количества компонентов для начала работы. Кроме того, у Django есть хорошая документация, которая поддерживается в актуальном состоянии, что часто является недостатком проектов с открытым исходным кодом. Это надежная структура, которая хорошо интегрируется со многими плагинами и расширениями сообщества. Сообщество, стоящее за проектом, также кажется хорошо организованным, о чем свидетельствует его очень хорошо документированная документация и учебные пособия.
Первым фреймворком, который я изучил, был django, с которым легко и быстро начать работать. Лично я думаю, что модель django не проста в использовании, в основном потому, что таблица ссылок между базами данных не является дружественной.официальный сайт джанго
Создайте проект:
$ pip install django
$ django-admin startproject djdemo
cd djdemo
$ django-admin startapp djapp
$ tree -L 3
.
├── djapp
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── djdemo
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ └── settings.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Ниже я привожу структуру каталогов Django одного из моих проектов. это классическая форма структуры каталогов django:
Django очень прост, а экосистема Django очень полная.Основываясь на разработке Django, вы можете найти существующие колеса для обычно необходимых функций. Эффективность разработки очень высока. Разработка под django заключается в заливке кода во фреймворк. Кроме того, он недостаточно гибкий и слишком тяжелый.
В Django много полезных строительных лесов
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
TurboGears
TurboGears — это фреймворк, построенный на нескольких известных проектах Python, таких как SQLAlchemy, WebOb, Repoze, Genshi. В некотором смысле TurboGears объединяет несколько открытых платформ. Как и Django, он использует архитектуру MVC. Он также недавно включил «минимальный режим», который позволяет ему функционировать как микрофреймворк.
TurboGears был разработан в 2005 году Кевином Дангуром. Он выпустил его как проект с открытым исходным кодом в сентябре того же года. В 2013 году разработчики проекта перешли на поддержку Python 3, отказавшись от кода Pylons, который они когда-то написали. К преимуществам TurboGears относятся:
- Агрегация поддерживается
- Мощный объектно-реляционный картограф
- Система транзакций поддерживает транзакции с несколькими базами данных
- Поддержка нескольких баз данных
- Используйте многократно используемые фрагменты кода в качестве шаблонов
- Большая гибкость для взаимодействия с нестандартными компонентами
- Разделение
- Система шаблонов упрощает дизайн для дизайнеров
TurboGears
Установить
$ pip install tg.devtools
$ gearbox --help
usage: gearbox [--version] [-v | -q] [--log-file LOG_FILE] [-h] [--debug]
[--relative]
TurboGears2 Gearbox toolset
optional arguments:
--version show program's version number and exit
-v, --verbose Increase verbosity of output. Can be repeated.
-q, --quiet Suppress output except warnings and errors.
--log-file LOG_FILE Specify a file to log output. Disabled by default.
-h, --help Show this help message and exit.
--debug Show tracebacks on errors.
--relative Load plugins and applications also from current path.
Commands:
help print detailed help for another command
makepackage Creates a basic python package
patch Patches files by replacing, appending or deleting text.
quickstart Creates a new TurboGears2 project
scaffold Creates a new file from a scaffold template
serve Serves a web application that uses a PasteDeploy configuration file
setup-app Setup an application, given a config file
tgext Creates a tgext.* package
Создать проект
$ gearbox quickstart tgdemo
// 会生成很多文件
.
├── MANIFEST.in
├── README.txt
├── __pycache__
│ └── setup.cpython-37.pyc
├── development.ini
├── migration
│ ├── env.py
│ ├── script.py.mako
│ └── versions
│ └── empty.txt
├── setup.cfg
├── setup.py
├── test.ini
├── tgdemo
│ ├── __init__.py
│ ├── config
│ │ ├── __init__.py
│ │ ├── app_cfg.py
│ │ ├── environment.py
│ │ └── middleware.py
│ ├── controllers
│ │ ├── __init__.py
│ │ ├── controller.py.template
│ │ ├── error.py
│ │ ├── root.py
│ │ └── secure.py
│ ├── i18n
│ │ └── ru
│ ├── lib
│ │ ├── __init__.py
│ │ ├── app_globals.py
│ │ ├── base.py
│ │ └── helpers.py
│ ├── model
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ └── model.py.template
│ ├── public
│ │ ├── css
│ │ ├── favicon.ico
│ │ ├── fonts
│ │ ├── img
│ │ └── javascript
│ ├── templates
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── about.xhtml
│ │ ├── data.xhtml
│ │ ├── environ.xhtml
│ │ ├── error.xhtml
│ │ ├── index.xhtml
│ │ ├── login.xhtml
│ │ ├── master.xhtml
│ │ └── template.xhtml.template
│ ├── tests
│ │ ├── __init__.py
│ │ ├── functional
│ │ └── models
│ └── websetup
│ ├── __init__.py
│ ├── bootstrap.py
│ └── schema.py
└── tgdemo.egg-info
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── entry_points.txt
├── not-zip-safe
├── requires.txt
└── top_level.txt
22 directories, 48 files
Приведенный выше 👆 — это форма кода, сгенерированная пакетом python, которая удобна для упаковки и распространения.
Пользователям нужно только изменить код в следующем каталоге
Пример использования TurboGears
from wsgiref.simple_server import make_server
from tg import expose, TGController, AppConfig
class RootController(TGController):
@expose()
def index(self):
return "<h1>Hello World</h1>"
config = AppConfig(minimal=True, root_controller=RootController())
print "Serving on port 8080..."
httpd = make_server('', 8080, config.make_wsgi_app())
httpd.serve_forever()
web2py
web2py— это платформа с открытым исходным кодом, которая позволяет разработчикам быстро создавать динамические и интерактивные веб-сайты. Целью его разработки является устранение множества повторяющихся задач программирования, которые замедляют разработку, таких как создание базовых таблиц. Изначально он разрабатывался как инструмент. Позже ему подражали Django и Ruby on Rails, фреймворк для Ruby. Как и TurboGears, он использует архитектуру MVC.
Оригинальный исходный код был открыт в 2007 году Массимо ДиПьерро. В то время он назывался Enterprise Web Framework (EWF). Он несколько раз менял свое имя из-за конфликтов имен и, наконец, был определен как текущий web2py в версии 1.16. Приложения, разработанные с использованием web2py, включают систему управления контентом Movuca, музыкальный веб-сайтNoobMusic, средство сетевой диагностики LinkFindr иInstant PressПлатформа для блогов. В 2011 году web2py был назван лучшим программным обеспечением для разработки с открытым исходным кодом.Премия Босси. На второй год он выиграл InfoWorld’sПремия «Технология года».
Как и Django, web2py также имеет обширную документацию. Новые и продвинутые разработчики могут скачать его бесплатноПолное руководство по разработке.
Некоторые преимущества web2py включают в себя:
- Простота использования. Как надежная полнофункциональная платформа, она работает без дополнительных зависимостей, проста в освоении и развертывании, а также устанавливается без каких-либо файлов конфигурации после загрузки, установки и готовности к использованию. Разработчики получают базу данных, веб-среду IDE, веб-сервер и мощный API, состоящий из нескольких основных объектов.
- Превосходная безопасность - язык шаблонов Web2py снижает опасность хакеров, использующих межсайтовые сценарии, уровень абстракции имеет проверки правильности полей формы при создании форм, позволяет избежать внедрения SQL, а также предотвращает атаки подделки межсайтовых запросов (csrf-атаки). Сеансы хранятся на сервере, что не позволяет злоумышленникам возиться с файлами cookie браузера, а каждый пароль хранится в хешированном виде.
Некоторые недостатки web2py включают в себя:
- Неудобный в использовании управляемый интерфейс на регулярной основе
- У управляемого интерфейса нет разрешения
- Нет встроенной поддержки модульного тестирования
- Быстрая разработка, все функции имеют поведение по умолчанию, формы генерируются автоматически, встроены высокоуровневые виджеты и сетки приложений.
Структура каталогов
project/
README
LICENSE
VERSION > this web2py version
web2py.py > the startup script
anyserver.py > to run with third party servers
... > other handlers and example files
gluon/ > the core libraries
packages/ > web2py submodules
dal/
contrib/ > third party libraries
tests/ > unittests
applications/ > are the apps
admin/ > web based IDE
...
examples/ > examples, docs, links
...
welcome/ > the scaffolding app (they all copy it)
ABOUT
LICENSE
models/
views/
controllers/
sessions/
errors/
cache/
static/
uploads/
modules/
cron/
tests/
... > your own apps
examples/ > example config files, mv .. and customize
extras/ > other files which are required for building web2py
scripts/ > utility and installation scripts
handlers/
wsgihandler.py > handler to connect to WSGI
... > handlers for Fast-CGI, SCGI, Gevent, etc
site-packages/ > additional optional modules
logs/ > log files will go in there
deposit/ > a place where web2py stores apps temporarily
Flask
Flask — это микрофреймворк Python, основанный на Jinja2 и Werkzeug, и, как и другие фреймворки, он распространяется под лицензией BSD, лицензией на бесплатное программное обеспечение с некоторыми ограничениями. Сайты, использующие Flask, включают LinkedIn и Pinterest. Flask имеет следующие особенности:
- Встроенная поддержка модульного тестирования
- Шаблон с использованием Jinjia2
- Обширная документация
- Сеансы клиента используют безопасные файлы cookie
- Сервер разработки и отладчик
- Спокойный запрос
- Совместимость с WSGI 1.0
- на основе юникода
- множество расширений
Flask — это молодой фреймворк, родившийся в 2010 году, цель Flask — не накладывать ограничений на программиста, позволяя вам использовать собственное реляционное сопоставление объектов базы данных, механизм шаблонов, промежуточное программное обеспечение сеанса и другие компоненты, необходимые для вашего проекта, в моем It кажется, что это то, для чего этот микрофреймворк предназначен.
Я бы сказал, что такие фреймворки, как Flask, больше подходят для опытных разработчиков и не нужны для небольших приложений, конечно, если вы просто хотите сделать простой REST API, тогда Flask, конечно, великолепен.
Лично я часто использую флягу. Flask — это микрофреймворк, более гибкий и подходящий для небольших проектов.
образец кода
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
Экология фляги также очень полная, и сообщество также очень активно.Необходимые ресурсы приведены ниже.Документация
Bottle
Как и flask, Bottle представляет собой сетевую среду Server Gateway Interface (WSGI). Как файл, он не зависит ни от какой библиотеки за пределами стандартной библиотеки Python. Когда Марсель Хеллкамп написал его в 2009 году, он начинался с минимального набора инструментов, включая шаблоны, маршрутизацию и уровень абстракции WSGI. Эта небольшая и мощная платформа отлично подходит для программистов, которые ищут гибкость и базовую функциональность, создают простые приложения и веб-сайты, а также создают веб-API.
К его преимуществам относятся:
- Встроенный быстрый шаблонизатор и поддержка Jinja2, Mako и Cheetah.
- Обширные инструменты для доступа к загрузкам, файлам cookie, данным форм, заголовкам и другим метаданным.
- Встроенный сервер разработки HTTP с поддержкой fapws3, Google App Engine, CherryPyPaste.
- Поддержка динамических URL-адресов
Еще одним преимуществом Bottle является то, что его небольшой размер позволяет легко встроить его в более крупное приложение, не беспокоясь о системных зависимостях. Если вы хотите создавать небольшие приложения с простой, чистой и быстрой структурой без лишней избыточности, Bottle для вас.
Образец кода:
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
многокадровый
Хотя в это трудно поверить, это всего лишь несколько из десятков фреймворков Python, доступных разработчикам. Python.org сообщает, что Django, TurboGears и web2py являются наиболее популярными полными вариантами. Чтобы обеспечить всесторонний взгляд на оптимизацию кадров, здесь мы добавляем два высокоуровневых морфологических микрофрейма. Другие фреймворки со страстными поклонниками включаютPyramid, web.py, Bobo, Albatross, иCherryPy.
Найдите подходящий вариант
Выбор правильной платформы зависит от размера проекта, его коммуникационных потребностей, является ли это автономным приложением, уровня требований к настройке, накладных расходов и многих других факторов. Что не менее важно, это зависит от того, какой фреймворк подходит для вашего личного способа работы. Просмотрите эти проекты и загрузите их последние выпуски. Прежде чем планировать большую поездку, совершите тест-драйв, чтобы убедиться, что вы находитесь в подходящем автомобиле.