Ir para o conteúdo

Aplicações

Lilya traz uma classe chamada Lilya que encapsula toda a funcionalidade da aplicação.

from lilya.apps import Lilya

Existem várias maneiras de criar uma aplicação Lilya, mas:

from lilya.apps import Lilya
from lilya.requests import Request
from lilya.responses import Ok
from lilya.routing import Path, WebSocketPath
from lilya.websockets import WebSocket


async def homepage():
    return Ok({"message": "Hello, world!"})


async def me():
    username = "John Doe"
    return Ok({"message": f"Hello, {username}!"})


def user(request: Request):
    username = request.path_params["username"]
    return Ok({"message": f"Hello, {username}!"})


async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    await websocket.send_text("Hello, websocket!")
    await websocket.close()


def startup():
    print("Up up we go!")


routes = [
    Path("/home", handler=homepage),
    Path("/me", handler=me),
    Path("/user/{username}", handler=user),
    WebSocketPath("/ws", handler=websocket_endpoint),
]

app = Lilya(routes=routes, on_startup=[startup])
from lilya.apps import Lilya
from lilya.requests import Request
from lilya.responses import Ok
from lilya.routing import Include, Path, WebSocketPath
from lilya.websockets import WebSocket


async def homepage():
    return Ok({"message": "Hello, world!"})


async def me():
    username = "John Doe"
    return Ok({"message": f"Hello, {username}!"})


def user(request: Request):
    username = request.path_params["username"]
    return Ok({"message": f"Hello, {username}!"})


async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    await websocket.send_text("Hello, websocket!")
    await websocket.close()


def startup():
    print("Up up we go!")


routes = [
    Include(
        "/",
        routes=[
            Path("/home", handler=homepage),
            Path("/me", handler=me),
            Path("/user/{username}", handler=user),
            WebSocketPath("/ws", handler=websocket_endpoint),
        ],
    )
]

app = Lilya(routes=routes, on_startup=[startup])

Testar usando o curl

$ curl -X GET http://localhost:8000/user/lilya

Criar uma instância de uma aplicação

Criar uma instância de uma aplicação pode ser feito de diferentes maneiras e com uma grande vantagem de usar as configurações para uma abordagem mais limpa.

Parâmetros:

  • debug - Boolean que indica se deve retornar o traceback em caso de erro. Basicamente, modo de debug, muito útil para desenvolvimento.
  • settings_module - Uma instância ou definição de classe de configurações de onde os valores das configurações serão lidos.
  • routes - Uma lista de rotas que escutam pedidos HTTP e WebSocket recebidos. Uma lista de Path, WebSocketPath, Include e Host.
  • permissions - Uma lista de permissões para atender aos pedidos de escutra da aplicação (HTTP e WebSockets).
  • middleware - Uma lista de middlewares para serem executados para cada solicitação. Os middlewares podem ser subclasses do MiddlewareProtocol.
  • exception_handlers - Um dicionário de tipos de exceção (ou exceções personalizadas) e as funções num nível superior da aplicação. As funções de exceção devem estar no formato handler(request, exc) -> response e podem ser funções padrão ou funções assíncronas.
  • on_shutdown - Uma lista de funções para serem executadas no encerramento da aplicação. As funções de encerramento não recebem nenhum argumento e podem ser funções padrão ou funções assíncronas.
  • on_startup - Uma lista de funções para serem executadas na inicialização da aplicação. As funções de inicialização não recebem nenhum argumento e podem ser funções padrão ou funções assíncronas.
  • lifepan - A função de contexto de vida útil é um estilo mais recente que substitui os handlers on_startup / on_shutdown. Use um ou outro, não ambos.
  • include_in_schema - Boolean para indicar se deve ser incluído no schema ou não. Isso pode ser útil se estiver a descontinuar uma aplicação Lilya Incluída inteira em favor de uma nova. O boolean* deve indicar que todos os caminhos devem ser considerados obsoletos.
  • redirect_slashes - Boolean para habilitar/desabilitar redirecionamento de barras para os handlers. Está activo por defeito.

Configurações da aplicação

As configurações são outra forma de controlar os parâmetros passados para o objecto Lilya ao instanciar. Consulte as configurações para obter mais detalhes e como usá-las para potencializar sua aplicação.

Para aceder às configurações da aplicação, existem diferentes formas:

from lilya.apps import Lilya
from lilya.requests import Request
from lilya.routing import Path


async def app_debug(request: Request):
    settings = request.app.settings
    return {"debug": settings.debug}


app = Lilya(routes=[Path("/", app_debug)])
from lilya.apps import Lilya
from lilya.conf import settings
from lilya.routing import Path


async def app_debug():
    return {"debug": settings.debug}


app = Lilya(routes=[Path("/", app_debug)])

Estado e instância da aplicação

Pode armazenar um estado extra arbitrário na instância da aplicação utilizando o atributo state.

Exemplo:

from lilya.apps import Lilya

app = Lilya()

app.state.ADMIN = "admin@lilya.dev"

Aceder à instância da aplicação

A instância da aplicação está sempre disponível através de request ou através de context.

Examplo

from lilya.apps import Lilya
from lilya.requests import Request
from lilya.context import Context
from lilya.routing import Path


# For request
def home_request(request: Request):
    app = request.app
    return {"message": "Welcome home"}


# For context
def home_context(context: Context):
    app = context.app
    return {"message": "Welcome home"}


app = Lilya(routes=[
        Path("/request", home_request),
        Path("/context", home_context),
    ]
)