Домой Edit me on GitHub

2020-12-05

Каналы передачи данных | Сетевое программирование | Базы данных | Основы Веб-программирования

Структура приложения

Хотя не составляет большой трудности написать Pyramid-приложение (проект) с нуля, Pyramid имеет инструменты для инициализации кода нового приложения по выбранному шаблону, или, в терминологии Pyramid, каркасной структуре (scaffolds). Например, в поставке имеются каркасные структуры для проектов, использующих ZODB или SQLAlchemy.

Проект — это каталог, содержащий по крайней мере один пакет на Python.

Типичная структура каталога для небольшого проекта:

MyProject/
|-- CHANGES.txt
|-- development.ini
|-- MANIFEST.in
|-- myproject
|   |-- __init__.py
|   |-- static
|   |   |-- favicon.ico
|   |   |-- logo.png
|   |   `-- pylons.css
|   |-- templates
|   |   `-- mytemplate.pt
|   |-- tests.py
|   `-- views.py
|-- production.ini
|-- README.txt
|-- setup.cfg
`-- setup.py

Приведённую структуру, как следует из документации, не следует сильно изменять, так как это может помешать другим разработчикам быстро ориентироваться в коде проекта. Тем не менее, растущий проект может потребовать некоторых изменений. Например, виды, модели (если они используются) и тесты можно, разбив на модули, перенести соответственно в подкаталоги views, models и tests (не забыв снабдить их файлом __init__.py).

Следует отметить, что Pyramid может работать с любым WSGI-сервером. Проекты, созданные по готовым каркасным структурам, используют сервер Waitress.

Стандартные шаблоны проектов

Список официальных шаблонов найти по адресу https://github.com/Pylons?q=cookiecutter.

starter
URL маршруты URL dispatch, без БД.
zodb
URL маршрутизация traversal и БД ZODB.
alchemy
URL маршрутизация URL dispatch и БД SQLite с использованием SQLAlchemy.

Некоторые пакеты могут дополнять этот список, например Cornice (https://github.com/Cornices/cookiecutter-cornice).

Cookiecutter

Cookiecutter - утилита позволяющая создавать проекты из шаблонов.

Установка Linux:

$ sudo apt install cookiecutter

Установка через Python:

$ pip install cookiecutter --user

Установка через Nix:

$ nix-env -i cookiecutter

Создание проекта

$ cookiecutter gh:Pylons/pyramid-cookiecutter-starter
project_name [Pyramid Scaffold]: myproject
repo_name [myproject2]: myproject
Select template_language:
1 - jinja2
2 - chameleon
3 - mako
Choose from 1, 2, 3 [1]: 3

===============================================================================
Documentation: https://docs.pylonsproject.org/projects/pyramid/en/latest/
Tutorials:     https://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/
Twitter:       https://twitter.com/PylonsProject
Mailing List:  https://groups.google.com/forum/#!forum/pylons-discuss
Welcome to Pyramid.  Sorry for the convenience.
===============================================================================

Change directory into your newly created project.
    cd myproject

Create a Python virtual environment.
    python3 -m venv env

Upgrade packaging tools.
    env/bin/pip install --upgrade pip setuptools

Install the project in editable mode with its testing requirements.
    env/bin/pip install -e ".[testing]"

Run your project's tests.
    env/bin/pytest

Run your project.
    env/bin/pserve development.ini
myproject/
├── CHANGES.txt
├── development.ini
├── MANIFEST.in
├── myproject
│   ├── __init__.py
│   ├── static
│   │   ├── pyramid-16x16.png
│   │   ├── pyramid.png
│   │   └── theme.css
│   ├── templates
│   │   ├── layout.mako
│   │   └── mytemplate.mako
│   ├── tests.py
│   └── views.py
├── production.ini
├── pytest.ini
├── README.txt
└── setup.py

3 directories, 15 files

Установка

$ cd myproject
$ python setup.py develop

Запуск

Часть настоек проекта, которые часто меняются, находится в файле development.ini.

$ pserve development.ini
Starting server in PID 16601.
serving on http://0.0.0.0:6543

Ниже показан пример настроек сервера. Сервер Waitress запустит MyProject.main по адресу 127.0.0.1 и порту 6543.

Пример настроек сервера из development.ini
[server:main]
use = egg:waitress#main
host = 127.0.0.1
port = 6543

Для автоматического перезапуска сервера после изменения файлов нужно указать флаг --reload.

$ pserve development.ini --reload
Starting subprocess with file monitor
Starting server in PID 16601.
serving on http://0.0.0.0:6543

Теперь, после изменения какого-либо из файлов .py или .ini, сервер перезапустится автоматически.

development.ini changed; reloading...
-------------------- Restarting --------------------
Starting server in PID 16602.
serving on http://0.0.0.0:6543

Просмотр

После запуска приложения через pserve, можно открыть страницу http://localhost:6543/ в браузере.

../../../_images/project.png

Debug Toolbar

../../../_images/project-debug.png
1
2
3
[app:main]
pyramid.includes =
    pyramid_debugtoolbar
Previous: Конфигурация Next: Настройки