Адрес блога: https://ask.hellobi.com/blog/zhijiДобро пожаловать на обмен и обучение.
В среде веб-разработки Python есть различные варианты, есть **Django,Tornado, Flask, web2py, Pylons, Pyramid и т.д., раньше писал Django, Tornado, сегодня в основном учимсяПирамида**, или узнайте из официальной документации.
- официальная документация
- Английский учебник:docs.pylons project.org/projects/friends…
- Creating Your First Pyramid Application
№ 1. Пирамида Pyramid является частью серии программного обеспечения, выпущенного в рамках проекта Pylons. **Официальный сайт пилонов**Описывает отношения между Pyramid и проектом Pylons.
Пирамида известна своими эффективными и быстрыми возможностями разработки. Официальная документация описывает это так:Pyramid is a small, fast, down-to-earth Python web framework. It is developed as part of the Pylons Project. It is licensed under a BSD-like license.Эта веб-инфраструктура с открытым исходным кодом имеет независимую от платформы структуру MVC, которая обеспечивает самый простой путь к разработке. Кроме того, это одна из предпочтительных платформ для эффективной разработки повторно используемого кода.
##Pyramid и другие веб-фреймворки (переведено из англоязычной документации Pyramid) Первая версия Pre-Life Pyramid (названная repoze.bfg) была создана в 2008 году. В конце 2010 года мы переименовали repoze.bfg в Pyramid и в ноябре того же года объединили его с проектом Pylons.
Pyramid был вдохновлен Zope, Pylons 1.0 и Django, и в конечном итоге Pyramid позаимствовал концепции и функции каждого из них и сформировал уникальную структуру.
Многие функции Pyramid восходят к Zope. Как и приложения Zope, приложения Pyramid легко расширяемы: если вы будете следовать определенным правилам, ваше приложение будет повторно использоваться, улучшаться, подвергаться рефакторингу и даже расширяться сторонними разработчиками без разветвления исходной программы. Такие концепции, как Traversal и декларативная безопасность, были впервые предложены в Zope.
Концепция пирамиды URL-диспетчеризации была вдохновлена системой маршрутов Pylons версии 1.0, а пирамида приняла либеральную политику, такую как Pylons версии 1.0. Он не указывает, какую базу данных вы должны использовать, его встроенные шаблоны только для удобства. По сути, он просто обеспечивает механизм отображения URL-адресов для просмотра кода и правил для вызова этих представлений. Вы можете использовать сторонние компоненты бесплатно для удовлетворения потребностей вашего проекта.
Концепция представления, которую часто использует Pyramid, пришла из Django. Стиль документации Pyramid больше похож на Django, чем на Zope.
Как и в Pylons 1.0, но не в Zope, разработчик приложения Pyramid может использовать команду оператора complete для выполнения общих задач настройки инфраструктуры, таких как добавление представления или маршрута. ZCML также имеет аналогичную функцию в Zope. Pyramid поддерживает готовую к использованию конфигурацию операторов команд и конфигурацию на основе модификаторов; ZCML используется через пакет расширения pyramd_zcml.
В отличие от Zope или фреймворка с полным стеком, такого как Django, Pyramid не делает никаких предположений о том, какой механизм сохраняемости вы используете для создания своего приложения. Приложения Zope зависят от ZODB; Pyramid также позволяет создавать программы ZODB, не полагаясь на саму ZODB. Точно так же Django предполагает, что вы хотите хранить данные своего приложения в реляционной базе данных. Пирамида никогда не делает таких предположений, она позволяет вам использовать реляционные базы данных, но не поощряет и не препятствует принятию решений.
Другие веб-фреймворки Python объявляют себя веб-фреймворками-членами класса, называемымиmodel-view-controllerFrameworks, Pyramid также попадает в эту категорию.
##Framework VS Libraries (переведено английской документацией Pyramid)
Самая большая разница между фреймворком и библиотекой заключается в том, что код в библиотеке вызывается написанным вами кодом, а фреймворк вызывает код, который вы написали. Создание приложения с использованием набора библиотек обычно легче начать, чем с использованием фреймворка, потому что вы можете выборочно передать некоторый контроль коду библиотеки, который вы не писали. Но когда вы используете фреймворк, вы должны передать большую часть контроля коду, который вы не писали: всему фреймворку. Вам не нужно использовать фреймворк для создания веб-приложения в случае использования Python. Было разработано большое количество богатых библиотек. Однако в практических приложениях более практично использовать фреймворк для создания приложений, чем ряд библиотек, если ряд функций, предоставляемых фреймворком, соответствует требованиям вашего проекта.
№ 2. Установка пирамидыОфициальный сайтЭто довольно ясно, просто следуйте ему.
- Установить инструменты настройкискачать**ez_setup.py**(После входа на эту страницу сохраните веб-страницу как ez_setup.py, не забудьте сохранить ее в каталоге D;\python). cmd входит в каталог D:\python и выполняет
python ez_setup.py
- установить виртуалэнвУстановите virtualenv с помощью программы Script/easy_install в каталоге python:
easy_install virtualenv
- Создайте рабочее пространство с помощью virtualenv
virtualenv --no-site-packages env
- установить пирамидуПосле выполнения вышеуказанных шагов должен появиться дополнительный файл env, папка cd env, а затем выполнить
easy_install pyramid
№ 3. Использование пирамиды
### 1. Создайте первое приложение пирамиды
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello %(name)s!'%request.matchdict)
if __name__ == '__main__':
#创建了一个Configuration类的实例config
config = Configurator()
#注册了一个以/hello/开头的URL路由,路由的名字就叫'hello'
config.add_route('hello','/hello/{name}')
#注册了一个view callable函数 URL Path(比如/hello/world)->route(比如'hello')->view callable(比如hello_world函数)
config.add_view(hello_world,route_name='hello')
#pyramid.config.Configurator.make_wsgi_app()方法来创建WSGI应用程序
app = config.make_wsgi_app()
#启动了一个WSGI服务
server = make_server('0.0.0.0',8080,app)
#serve_forever()方法创建了一个循环来接受外界的request请求
server.serve_forever()
Откройте браузер и введите http://localhost:8080/hello/world, он отобразит «Hello world!». Теперь, когда у нас есть общее представление об этом примере программы, давайте проанализируем, как он работает, шаг за шагом.
-
Пакет импортаСтрока 2 вводит класс Configurator модуля пирамиды.config, а строка 10 создает его экземпляр, а затем настраивает наше приложение через этот экземпляр. Как и другие веб-фреймворки Python, Pyramid используетWSGI Протокол для связи приложения с веб-сервером. Модуль wsgiref, использованный в первой строке, представляет собой инкапсуляцию службы WSGI, и теперь wsgiref введен в стандартную библиотеку Python. Третья строка вводит пирамиду.response.Response, которая используется для возврата информации об ответе.
-
Просмотр вызываемого объявленияШестая строка определяет функцию hello_world, передает параметр запроса и возвращает экземпляр класса пирамиды.ответ.ответ. Введите совпадающий путь имени, вызвав метод matchdict объекта запроса. Поскольку мы посещаем http://localhost:8080/hello/world, мир сопоставляется и возвращается как строка «hello world», если вы посещаете http://localhost:8080/hello/pyramid, то «hello пирамида !" будет возвращено. Эта функция называется view callable (вы можете называть ее view callable, но я все же думаю, что английский язык лучше). Вызов представления принимает один параметр: request. он вернет ответ объект. Вызываемое представление не обязательно является функцией, оно также может быть классом или экземпляром, но здесь мы используем функции для простоты. Вызываемое представление всегда сопровождается вызовом объекта запроса. Объект запроса представляет собой HTTP-запрос, отправленный пирамиде через активированный сервер WSGI. Вызываемое представление также должно возвращать объект ответа. Потому что объект ответа содержит всю необходимую информацию для формулирования фактического ответа HTTP. Этот объект проходитwsgi Сервер, который является пирамидой, преобразование отправляется обратно к запрашивающему браузеру в качестве текстового сообщения. Для того чтобы вернуть ответ, экземпляр ответа каждого представления Callable создан. В функции Hello_world символьная строка для возврата отклика тела.
-
Конфигурация приложения Конфигурация приложенияСтроки 10-15 содержат информацию о конфигурации приложения. Строка 10 создает экземпляр класса Configuration, config, через который настраивается наше приложение Pyramid, включая маршрутизацию, ip, порт и другую информацию. Вызовите различные методы конфига, чтобы настроить реестр приложений (applicationRegistry) для регистрации нашего приложения. Что такое реестр приложений? Вот официальное объяснение:
Строка 11 вызывает метод пирамиды. Строка 12 config.add_v запускает функцию iew(hello_world, route_name='hello'), которая регистрирует вызываемую функцию представления (то есть функцию hello_world), которая должна вызываться при совпадении маршрута с именем hello. Соответствие между этими тремя: путь URL (например, /hello/world) -> маршрут (например, «привет») -> вызываемый вид (например, функция hello_world). Таким образом, страница переднего плана соответствует методу фоновой обработки.Создание приложения WSGI Создание приложения WSGIКогда вся работа по настройке завершена, скрипт Python создает приложение WSGI с помощью метода пирамиды.config.Configurator.make_wsgi_app(). Этот метод возвращает объект приложения WSGI и передает ссылку на приложение, которое будет использоваться сервером WSGI. WSGI — это протокол, который позволяет серверам взаимодействовать с приложениями Python. Я не буду подробно обсуждать здесь WSGI, если вам интересно, вы можете перейти на официальный сайт.wsgi.orgвыучить больше.WSGI Application ServingВ последних двух строках мы запускаем службу WSGI. Метод make_server('0.0.0.0',8080,app) связывает IP-адрес и порт, а последний параметр передает объект нашего приложения (маршрутизатор), который является приложением, которое мы хотим обслуживать. Метод serve_forever() создает цикл для приема внешних запросов.
#4.Синтаксис части пирамиды
-
Использование locals(): locals() может напрямую передавать все переменные функции в шаблон. Конечно, это может передать некоторые дополнительные параметры, что является пустой тратой памяти.
-
Метод render() — это новый ярлык для render_to_response, который автоматически использует метод RequestContext. Последний должен быть закодирован, что является наиболее очевидным отличием.Конечно, первый более лаконичен.
return render_to_response('blog_add.html',{'blog': blog,
'form': form, 'id': id, 'tag': tag},
context_instance=RequestContext(request))
return render(request, 'blog_add.html',
{'blog': blog, 'form': form, 'id': id, 'tag': tag})