Маршрутизация
openerp.http.route(route=None, **kw)[исходный код]
Декоратор, который помечает метод как обработчик запросов. Этот метод должен быть частью подкласса Controller
.
- route -- Строка или массив. Часть маршрута, которая будет определять, какие HTTP-запросы будут соответствовать декодируемому методу. Может быть как одной строкой, так и массивом строк. См. Документацию маршрутизации werkzeug для формата маршрута (http://werkzeug.pocoo.org/docs/routing/).
- type -- Тип запроса может быть как
'http'
так и'json'
. - auth -- Тип метода авторизации, может иметь следующие значения: *
user
: пользователь должен быть авторизован, и текущий запрос будет выполняться с правами доступа данного пользователя. *public
: пользователь не обязан быть авторизован. Если нет, то текущий запрос будет выполнен с использованием общего общего пользователя. *none
: В основном использоуется фреймворком и модулями авторизации. Код запроса не будет иметь никаких средств для доступа ни к базе данных ни какой либо информации указывающей на текущую базу данны и текущего пользователя - methods -- Последовательность HTTP-методов, к которым относится данный маршрут. Если ничего не указано, то разрешены все методы.
- cors -- Значение директивы Access-Control-Allow-Origin cors.
Запрос
Объект запроса автоматически устанавливается в openerp.http.request
в начале запроса
class openerp.http.WebRequest(httprequest)[исходный код]
Родительский класс для всех типов Odoo Web запросов , в основном используется для инициализации и настройки объекта запроса (диспетчеризация должна быть обработана подклассами)
werkzeug.wrappers.BaseRequest
) -- Объект wrapped werkzeug Requesthttprequest
Оригинальный объект werkzeug.wrappers.Request
, предоставленный запросу
params
Класс Mapping
параметров запроса, обычно не используются, поскольку они предоставляются непосредственно методу обработчика в качестве аргументов ключевого слова
env
Класс Environment
, привязанный к текущему запросу. Вызывает RuntimeError
, если текущие запросы не привязаны к базе данных.
context
Класс Mapping
из контекстных значений для текущего запроса
session
Класс OpenERPSession
, содержащий данные HTTP для текущего сеанса
cr
Класс Cursor
, инициализированный для текущего вызова метода.
Когда текущий запрос использует авторизацию none
, доступ к курсору вызовет исключение.
debug
Указывает, находится ли текущий запрос в режиме «отладки»
session_id
Непрозрачный идентификатор для экземпляра класса OpenERPSession
текущего запроса
Не рекомендуется, начиная с версии 8.0: Используйте атрибут sid
для session
registry
Запись в базе данных, связанной с этим запросом. Может быть None
, если текущий запрос использует тип авторизации none
.
Не рекомендуется, начиная с версии 8.0: используйте env
db
База данных, связанная с этим запросом. Может быть None
, если текущий запрос использует тип авторизации none
.
httpsession
Данные сеанса HTTP
Не рекомендуется, начиная с версии 8.0: Используйте session
вместо httpsession.
class openerp.http.HttpRequest(*args)[исходный код]
Обработчик для запросов типа http
.
Параметры сопоставленной маршрутизации, параметры строки запроса, параметры form и файлы передаются методу обработчика в качестве аргументов.
В случае конфликта имен приоритет имеют параметры маршрутизации.
Результатом метода-обработчика может быть:
Несуществующее значение, и в этом случае HTTP-ответом будет HTTP 204 (No Content)
Объект werkzeug Response, который возвращает как есть
str
илиunicode
, будут заключены в объект Response и интерпретированы как HTML
make_response(data, headers=None, cookies=None)[исходный код]
Помощник для ответов без HTML или HTML ответов с настраиваемыми заголовками ответа или файлами cookie.
В то время как обработчики могут просто вернуть разметку HTML страницы, которую они хотят отправить как строку, если возвращены не-HTML данные, им необходимо создать полный объект ответа, или возвращенные данные не будут правильно интерпретироваться клиентами.
- data (
basestring
) -- тело ответа - headers (
[(name, value)]
) -- Заголовки HTTP для установки ответа - cookies (
collections.Mapping
) -- Файлы cookie для установки на клиенте
not_found(description=None)[исходный код]
Ссылка на объект для ответа HTTP 404 (не найден)
render(template, qcontext=None, lazy=True, **kw)[исходный код]
Отложенная визуализация шаблона QWeb.
Фактическое отображение заданного шаблона произойдет в конце отправки. Между тем template и/или qcontext могут быть изменены или даже заменены статическим ответом.
- template (
basestring
) -- шаблон для визуализации - qcontext (
dict
) -- отображение контекста - lazy (
bool
) -- Следует ли откладывать отображение шаблона до последнего возможного момента - kw -- Перенаправляется в объект ответа werkzeug
class openerp.http.JsonRequest(*args)[исходный код]
Обработчик запросов для JSON-RPC 2 через HTTP
method
игнорируетсяparams
должен быть JSON объектом (не массивом) и передаваться как аргументы методу обработчикаРезультат метода обработчика возвращается в виде JSON-RPC
result
и входит в состав ответа JSON-RPC
Успешный запрос:
--> {"jsonrpc": "2.0",
"method": "call",
"params": {"context": {},
"arg1": "val1" },
"id": null}
<-- {"jsonrpc": "2.0",
"result": { "res1": "val1" },
"id": null}
Запрос, возвращающий ошибки:
--> {"jsonrpc": "2.0",
"method": "call",
"params": {"context": {},
"arg1": "val1" },
"id": null}
<-- {"jsonrpc": "2.0",
"error": {"code": 1,
"message": "End user error message.",
"data": {"code": "codestring",
"debug": "traceback" } },
"id": null}
Ответ
class openerp.http.Response(*args, **kw)[исходный код]
Объект ответа передается через цепочку маршрутов контроллера.
В дополнение к параметрам werkzeug.wrappers.Response
, конструктор этого класса может принимать следующие дополнительные параметры для отложенного отображения шаблона QWeb.
- template (
basestring
) -- шаблон для визуализации - qcontext (
dict
) -- отображение контекста - uid (
int
) -- Идентификатор пользователя для вызова отображения ir.ui.view, ПриNone
используется идентификатор пользователя, отправившего запрос (по умолчанию)
эти атрибуты доступны в качестве параметров в объекте Response и могут быть изменены в любое время перед отображением
Также предоставляет все атрибуты и методы класса werkzeug.wrappers.Response
.
render()[исходный код]
Возвращает результат и отображает шаблон ответа,
flatten()[исходный код]
Принудительное отображение шаблона ответа, устанавливает результат как тело ответа и отменяет template
Контроллеры.
Контроллеры должны обеспечивать расширяемость, например как Model
, но не могут использовать тот же механизм, что и предпосылки (база данных с загруженными модулями), могут быть не доступны (например, не создана или не выбрана база данных).
Таким образом, контроллеры предоставляют свой собственный механизм расширения, отдельный от моделей данных:
Контроллеры создаются путем наследования
class openerp.http.Controller[исходный код]
и определением методов, декорируемых route()
:
class MyController(openerp.http.Controller):
@route('/some_url', auth='public')
def handler(self):
return stuff()
Чтобы переопределить контроллер, унаследуйте его класс и, при необходимости, переопределите соответствующие методы:
class Extension(MyController):
@route()
def handler(self):
do_before()
return super(Extension, self).handler()
Декорирование с помощью
route()
необходимо для сохранения видимости метода (и маршрута): если метод переопределяется без декорирования, он не будет опубликованДекораторы всех методов объединены, если декоратор переопределяющего метода не имеет аргументов, все предыдущие декораторы будут сохранены, любой аргумент переопределит ранее определенные, например:
class Restrict(MyController): @route(auth='user') def handler(self): return super(Restrict, self).handler()
Изменит
/some_url
тип авторизации с public на user (требующего входа в систему)