См.также
Представления (views) создаются в виде функций или методов и могут находится в
любом месте проекта. В качестве аргумента функция принимает объект request
,
а возвращает объект response
:
from pyramid.response import Response
def my_view(request):
return Response("Hello, world!")
В классе, который содержит представления-методы, объект request
передается в конструктор:
class MyHandler(object):
def __init__(self, request):
self.request = request
def my_view(self):
return Response("Hello, classy world!")
route_name
Имя для привязки к роуту. Нужно если используется URL диспетчеризация.
renderer
Имя обработчика (string, json) или шаблон (index.jinja2, index.pt, index.mako).
permission
Строка и именем права доступа, которое текущий пользователь должен иметь чтобы вызвать это представление.
request_method
“GET”, “POST”, “PUT”, “DELETE’, “HEAD”.
request_param
Проверяет наличие параметров в запросе, например «foo» означает что в запросе должен быть параметр с именем «foo». «foo=1» означает что этот параметр должен быть равен 1.
match_param
Тоже что иrequest_param
но проверяет все параметры, в том числе которые пришли от URL диспетчеризации.
Декларативный способ задания представлений осуществляется при помощи
декораторов pyramid.view.view_config
и
pyramid.view.view_defaults
.
from pyramid.view import view_config
class Handler(object):
def __init__(self, request):
self.request = request
class Main(Handler):
@view_config(route_name="home", renderer="index.mako")
def index(self):
return {"project": "Akhet Demo"}
Функция или метод может быть привязана к нескольким представлениям.
class Main(Handler):
@view_config(route_name="home", renderer="index.mako")
@view_config(route_name="home_json", renderer="json")
def index(self):
return {"project": "Akhet Demo"}
Пример REST
from pyramid.view import view_defaults
from pyramid.view import view_config
from pyramid.response import Response
@view_defaults(route_name='rest')
class RESTView(object):
def __init__(self, request):
self.request = request
@view_config(request_method='GET')
def get(self):
return Response('get')
@view_config(request_method='POST')
def post(self):
return Response('post')
@view_config(request_method='DELETE')
def delete(self):
return Response('delete')
from pyramid.config import not_
...
config.add_view(Main.index, route_name="home", request_method=not_('POST'))
Пример REST.
from pyramid.response import Response
from pyramid.config import Configurator
class RESTView(object):
def __init__(self, request):
self.request = request
def get(self):
return Response('get')
def post(self):
return Response('post')
def delete(self):
return Response('delete')
def main(global_config, **settings):
config = Configurator()
config.add_route('rest', '/rest')
config.add_view(RESTView, route_name='rest', attr='get', request_method='GET')
config.add_view(RESTView, route_name='rest', attr='post', request_method='POST')
config.add_view(RESTView, route_name='rest', attr='delete', request_method='DELETE')
return config.make_wsgi_app()
from pyramid.view import view_defaults
from pyramid.response import Response
from pyramid.config import Configurator
@view_defaults(route_name='rest')
class RESTView(object):
def __init__(self, request):
self.request = request
def get(self):
return Response('get')
def post(self):
return Response('post')
def delete(self):
return Response('delete')
def main(global_config, **settings):
config = Configurator()
config.add_route('rest', '/rest')
config.add_view(RESTView, attr='get', request_method='GET')
config.add_view(RESTView, attr='post', request_method='POST')
config.add_view(RESTView, attr='delete', request_method='DELETE')
return config.make_wsgi_app()