ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
Ravyn ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Lilya ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΊΠ»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ravyn, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ»Π°ΡΡ Ravyn¶
from ravyn import (
Ravyn,
Gateway,
Request,
Response,
Websocket,
WebSocketGateway,
get,
websocket,
)
@get()
async def homepage(request: Request) -> Response:
return Response("Hello, world!")
@get()
async def me(request: Request) -> Response:
username = "John Doe"
return Response("Hello, %s!" % username)
@get()
def user(request: Request) -> Response:
username = request.path_params["username"]
return Response("Hello, %s!" % username)
@websocket()
async def websocket_endpoint(socket: Websocket) -> None:
await socket.accept()
await socket.send_text("Hello, websocket!")
await socket.close()
def startup():
print("Up up we go!")
routes = [
Gateway("/home", handler=homepage),
Gateway("/me", handler=me),
Gateway("/user/{username}", handler=user),
WebSocketGateway("/ws", handler=websocket_endpoint),
]
app = Ravyn(routes=routes, on_startup=[startup])
from ravyn.applications import Ravyn
from ravyn.requests import Request
from ravyn.responses import Response
from ravyn.routing.handlers import get, websocket
from ravyn.routing.router import Gateway, WebSocketGateway
from ravyn.websockets import WebSocket
@get()
async def homepage(request: Request) -> Response:
return Response("Hello, world!")
@get()
async def me(request: Request) -> Response:
username = "John Doe"
return Response("Hello, %s!" % username)
@get()
def user(request: Request) -> Response:
username = request.path_params["username"]
return Response("Hello, %s!" % username)
@websocket()
async def websocket_endpoint(socket: WebSocket) -> None:
await socket.accept()
await socket.send_text("Hello, websocket!")
await socket.close()
def startup():
print("Up up we go!")
routes = [
Gateway("/home", handler=homepage),
Gateway("/me", handler=me),
Gateway("/user/{username}", handler=user),
WebSocketGateway("/ws", handler=websocket_endpoint),
]
app = Ravyn(routes=routes, on_startup=[startup])
from ravyn.applications import Ravyn
from ravyn.requests import Request
from ravyn.responses import Response
from ravyn.routing.handlers import get, websocket
from ravyn.routing.router import Gateway, Include, WebSocketGateway
from ravyn.websockets import Websocket
@get()
async def homepage(request: Request) -> Response:
return Response("Hello, world!")
@get()
async def me(request: Request) -> Response:
username = "John Doe"
return Response("Hello, %s!" % username)
@get()
def user(request: Request) -> Response:
username = request.path_params["username"]
return Response("Hello, %s!" % username)
@websocket()
async def websocket_endpoint(socket: Websocket) -> None:
await socket.accept()
await socket.send_text("Hello, websocket!")
await socket.close()
def startup():
print("Up up we go!")
routes = [
Include(
routes=[
Gateway("/home", handler=homepage),
Gateway("/me", handler=me),
Gateway("/user/{username}", handler=user),
WebSocketGateway("/ws", handler=websocket_endpoint),
]
)
]
app = Ravyn(routes=routes, on_startup=[startup])
ΠΡΡΡΡΠ°Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ°¶
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Swagger ΠΈ ReDoc ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
username = request.path_params["username"], Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠ°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ β Π²ΡΠ·ΡΠ²Π°ΡΡ API Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ΅ΡΠ΅Π· Π»ΡΠ±ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠ»ΠΈ Π±ΡΠ°ΡΠ·Π΅Ρ.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ url ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Ρ
Π²Π°ΡΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Request.path_params, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ ΡΠ΅ΡΠ΅Π· Swagger UI.
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ curl ΠΈΠ»ΠΈ insomnia¶
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ cURL:
$ curl -X GET http://localhost:8000/user/ravyn
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Insomnia:
Note
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅, ΠΊΡΠΎΠΌΠ΅ insomnia. ΠΡΠΎ Π±ΡΠ»ΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- debug - ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ . Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
- title - ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- app_name - ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- description - ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- version - ΠΠ΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- contact - ΠΠΎΠ½ΡΠ°ΠΊΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- terms_of_service - Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- license - ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- servers - Π‘Π΅ΡΠ²Π΅ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- secret_key - Π‘Π΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ).
- allowed_hosts - Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΡ Ρ ΠΎΡΡΠΎΠ². ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ middleware Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΡ Ρ ΠΎΡΡΠΎΠ².
- allow_origins - Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ². ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ middleware CORS. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
allow_originsΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ CORSConfig, Π½ΠΎ Π½Π΅ ΠΎΠ±Π°. - routes - Π‘ΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ HTTP ΠΈ WebSocket Π·Π°ΠΏΡΠΎΡΠΎΠ². Π‘ΠΏΠΈΡΠΎΠΊ Gateway, WebSocketGateway ΠΈΠ»ΠΈ Include.
- interceptors - Π‘ΠΏΠΈΡΠΎΠΊ interceptors Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (HTTP ΠΈ WebSocket).
- permissions - Π‘ΠΏΠΈΡΠΎΠΊ permissions Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (HTTP ΠΈ WebSocket).
- middleware - Π‘ΠΏΠΈΡΠΎΠΊ middleware, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ravyn Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ middleware ΠΈΠ· ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ (CSRF, CORS, JWT...) ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ middleware. Middleware ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ MiddlewareProtocol ΠΈΠ»ΠΈ Lilya Middleware. Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°Ρ Python.
- dependencies - Π‘Π»ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊ ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Inject, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- exception_handlers - Π‘Π»ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ) ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π° Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π² ΡΠΎΡΠΌΠ΅
handler(request, exc) -> responseΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. - csrf_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ CSRFConfig, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ middleware CSRF.
- openapi_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ OpenAPIConfig, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ OpenAPI ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
- cors_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ CORSConfig, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ middleware CORS.
- static_files_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ StaticFilesConfig, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- template_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ TemplateConfig, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ.
- session_config - ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ SessionConfig, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ middleware Π΄Π»Ρ ΡΠ΅ΡΡΠΈΠΉ.
- response_class - ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ Response, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- response_cookies - Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² cookie.
- response_headers - Π‘Π»ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².
- scheduler_config - ΠΠ»Π°ΡΡ SchedulerConfig, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π°Π΄Π°Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°.
- timezone - Π§Π°ΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
UTC. -
on_shutdown - Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
-
on_startup - Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
- lifespan - Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° - ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠΉ ΡΡΠΈΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ on_startup / on_shutdown. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ , Π° Π½Π΅ ΠΎΠ±Π°.
- tags - Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅Π³ΠΎΠ² Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΡ Π΅ΠΌΡ OpenAPI.
- include_in_schema - ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»Π°Π³, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΡ Π΅ΠΌΡ ΠΈΠ»ΠΈ Π½Π΅Ρ.
- deprecated - ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»Π°Π³ Π΄Π»Ρ ΡΡΡΠ°ΡΠ΅Π²Π°Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- security - ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OpenAPI.
- enable_openapi - Π€Π»Π°Π³ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ OpenAPI. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ.
- redirect_slashes - Π€Π»Π°Π³ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ - ΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ravyn ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
from ravyn import Ravyn, Gateway, Request, get
@get()
async def app_name(request: Request) -> dict:
settings = request.app.settings
return {"app_name": settings.app_name}
app = Ravyn(routes=[Gateway(handler=app_name)])
from ravyn import Ravyn, Gateway, get, settings
@get()
async def app_name() -> dict:
return {"app_name": settings.app_name}
app = Ravyn(routes=[Gateway(handler=app_name)])
from ravyn import Ravyn, Gateway, get
from ravyn.conf import settings
@get()
async def app_name() -> dict:
return {"app_name": settings.app_name}
app = Ravyn(routes=[Gateway(handler=app_name)])
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ State.
ΠΡΠΈΠΌΠ΅Ρ:
from ravyn import Ravyn
from ravyn.core.datastructures import State
app = Ravyn()
app.state = State({"ADMIN_EMAIL": "admin@example.com"})
ΠΠΎΡΡΡΠΏ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
Π ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΡΠ΅ΡΠ΅Π· request, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½.
ΠΡΠΈΠΌΠ΅Ρ:
from ravyn import Ravyn, Gateway, JSONResponse, Request, get
@get()
async def user(request: Request) -> JSONResponse:
return JSONResponse({"app_name": request.app.settings.app_name})
app = Ravyn(routes=[Gateway(handler=user)])
ΠΠΎΡΡΡΠΏ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ¶
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· request, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½.
ΠΡΠΈΠΌΠ΅Ρ:
from ravyn import Ravyn, Gateway, JSONResponse, Request, get
from ravyn.core.datastructures import State
@get()
async def user(request: Request) -> JSONResponse:
return JSONResponse({"admin_email": request.app.state["ADMIN_EMAIL"]})
app = Ravyn(routes=[Gateway(handler=user)])
app.state = State({"ADMIN_EMAIL": "admin@example.com"})
