Sanic — это асинхронный веб-фреймворк и веб-сервер для Python. Он разработан в MagicStack и основан на uvloop, который является заменой цикла событий asyncio по умолчанию в Python. Это делает Sanic невероятно быстрым.
Sanic напоминает Flask по синтаксису. Его можно использовать для создания масштабируемых, эффективных и быстродействующих веб-приложений, заменяя Django или Flask.
Для установки Sanic в виртуальную среду Python используйте команду pip3 install sanic. Затем создайте файл с именем main.py и напишите код для вашего приложения. В этом файле вы можете определить маршруты, схемы и другие компоненты вашего приложения.
Bulma — это CSS-фреймворк, который использует семантические классы для создания интерфейсов. Вот основные принципы работы Bulma:
Формы:
Bulma предоставляет множество классов для создания форм, включая поля ввода, кнопки и переключатели.
Компоненты:
Bulma предлагает готовые компоненты, такие как меню, панели навигации и карточки, которые можно легко настроить под свои нужды.
Макет:
Bulma предоставляет различные варианты макетов, включая фиксированные и адаптивные, а также возможность центрировать элементы на странице.
Цвета и стили:
Bulma предлагает широкий выбор цветов и стилей для элементов интерфейса, а также возможность добавлять свои собственные стили с помощью Sass.
Адаптивность:
Bulma основана на Flexbox, что обеспечивает хорошую адаптивность и отзывчивость интерфейса на разных устройствах и разрешениях экрана.
Документация и сообщество:
Bulma имеет подробную документацию и активное сообщество, которое помогает разработчикам решать возникающие проблемы и делиться опытом.
Tortoise-ORM предназначена для облегчения миграции разработчиков с синхронных ORM на асинхронные. Она также показывает хорошие результаты в сравнении с другими ORM для Python.
Brython — это реализация языка Python 3, написанная на JavaScript.
Она позволяет писать код на Python для использования в веб-приложениях.
Brython работает следующим образом:
Вы пишете код на Python, используя синтаксис и структуры данных языка Python.Brython преобразует ваш код на Python в эквивалентный код на JavaScript и выполняет его в браузере. Таким образом, вы получаете доступ к возможностям Python в вашем веб-приложении, используя привычный синтаксис и структуры данных.
Мы напишем самое простое приложение для демонстрации работы фреймворков.
Создадим директорию для нашей базы данных "models/" в этой директории создадим файл model.py
from tortoise.models import Model
from tortoise import fields
class TimestampMixin():
created_at = fields.DatetimeField(null=True, auto_now_add=True)
modified_at = fields.DatetimeField(null=True, auto_now=True)
class Pages(Model, TimestampMixin):
id = fields.IntField(pk=True)
name = fields.CharField(200)
content = fields.TextField()
class Meta:
table = "pages"
ordering = ["-id"]
def __str__(self):
return str(self.name)
@property
def time_create(self):
return self.created_at.strftime("%A %d. %B %Y")
@property
def pjson(self):
return {"name": self.name, "text": self.content, "time_create":self.time_create}
Создадим "templates/" в это директории создадим файл index.html
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Brython Sanic Tortoise Bulma </title>
<!-- здесь мы подключаем bulma css -->
<link rel="stylesheet" href="https://unpkg.com/bulma@1.0.0/css/bulma.min.css" />
<!-- здесь мы подключаем Brython -->
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/brython@3.12.2/brython.min.js">
</script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/brython@3.12.2/brython_stdlib.js">
</script>
</head>
<!-- здесь мы запускаем brython -->
<body onload="brython()">
................................
</section>
<!-- здесь мы подключаем наш файл brython -->
<script type="text/python" src="/static/main.py" id="notify"></script>
</body>
</html>
Создадим "static/" в этой директории создадим файл main.py
Содержани файла main.py - это brython файл, что удивительно знакомый синтаксис.
from browser import document, ajax, bind, html, timer
url = "http://localhost:8000"
sms = document["sms"]
def create_htmlBox(data: dict):
box = document["notify"]
box.clear()
box <= html.P("База данных всегда будет отправлять последнюю запись", Class="title is-size-5")
text = html.P(data.get('text'), Class="content")
title = html.P(data.get("name"), Class="title is-size-5")
div = html.DIV( Class="box")
date = html.P(data.get("time_create"), Class="")
div <= title
div <= text
div <= date
box <= div
#timer.set_timeout(box.clear, 2000)
def complete(req):
sms.value = ""
if req.status == 200 or req.status == 0:
document["answer"].html = req.json
answer = req.json
create_htmlBox(answer.get("answer"))
else:
document["answer"].html = "error " + req.text
def send_sms(e):
data_sms = sms.value if sms.value != "" else "no text"
req = ajax.Ajax()
req.bind('complete', complete)
req.open('POST', url, True)
req.set_header('content-type', 'application/json')
req.send(encodind_dict({"sms": data_sms}))
document['send'].bind("click", send_sms)
Самое главное, создадим файл app.py
from sanic_ext import Extend, render
from sanic import Request, Sanic, json, response
from tortoise.contrib.sanic import register_tortoise
from models.model import Pages
app = Sanic('torti')
app.config.OAS = False
app.config['CORS_AUTOMATIC_OPTIONS'] = True
app.static('/static', './static', name="static")
@app.get("/")
async def handler(request: Request):
return await render("/index.html" )
@app.post("/")
async def handler_post(request: Request):
r = request.json
data = r.get('sms', None)
if data:
page = Pages(name="test", content=data)
await page.save()
bd_page = await Pages.filter(name="test").first()
answer = {"answer": bd_page.pjson}
return json(answer)
Создадим виртуальное окружение
python3 -m venv venv
source ./venv/bin/activate
Загрузим нужные пакеты -
pip install tortoise-orm
pip install sanic_ext
pip install sanic
pip install jinja2
А ещё проще зайти на https://t.me/frameworki_app
под тегом sanic_orm_brython
скачать zip архив, распаковать
выполнить команду python -m pip install -r requirements.txt
запустить python app.py