Отказ от ответственности: я являюсь разработчиком этой платформы.
Установка Ретики
Перед установкой Retica рекомендуется создать виртуальную среду для вашего проекта. Создайте виртуальную среду с помощью следующей команды:
$~ python3 -m pip install --upgrade virtualenv $~ python3 -m venv env_name $~ source env_name/bin/activate
Retica доступна через диспетчер пакетов pip.
$~ pip install retica
Если у вас не установлен pip, вы можете установить его, запустив:
$~ python -m ensurepip —upgrade
Создание нового проекта Retica
Фреймворк Retica поставляется с ReticaCLI, который представляет собой инструмент на основе терминала, который позволяет вам легко создавать новый проект или запускать существующие проекты.
Чтобы создать новый проект Retica, запустите:
$~ retica create Project Name: Retica Blog Project Description: A Blog Written In Python Using The Retica Framework Project Author: Sushant Shah Project Keywords: blog,python,retica,programming,technology Import Frontend Libraries? (y/n) n Creating project...
Структура папки:
Blog App/ |- env/ |- templates/ |- plugins/ |- app.py |- run.py
Сгенерированный app.py
import Retica import Retica.Render retica = Retica.Server(__name__) templator = Retica.Render.TemplateRender(retica,template_dir="Templates") libraries = {} metadata = { 'name': 'Retica Blog', 'description': 'A Blog Written In Python Using The Retica Framework', 'author': 'Sushant Shah', 'keywords': 'blog,python,retica,programming,technology', } @retica.create_endpoint("/") def index(request: Retica.Request.request, response: Retica.Response.response, **data): data['libraries'] = libraries data['metadata'] = metadata response.body = templator.render("index.jinja", data)
Создание веб-приложения для блога
Добавление базы данных sqlite3
Давайте начнем с добавления базы данных в наш проект. Мы будем использовать sqlite3, который поставляется со стандартной библиотекой Python для хранения наших данных.
У нас будет 2 отдельные базы данных:
1. Пользователи
2. Сообщения.
Чтобы импортировать пакет sqlite3 в наш проект, добавьте следующую строку в начало app.py.
import sqlite3
Во-первых, давайте инициализируем наши базы данных с помощью функции connect()
и создадим курсоры для взаимодействия с базами данных.
users_conn = sqlite3.connect("users.db") posts_conn = sqlite3.connect("posts.db") users = users_conn.cursor() posts = users_conn.cursor()
Теперь давайте включим принудительное применение внешнего ключа.
users.execute("PRAGMA foreign_keys = ON") posts.execute("PRAGMA foreign_keys = ON")
Наконец, давайте создадим классы User
и Post
в качестве удобного интерфейса для нашей базы данных. Мы также переместим весь код SQLite в метод __init__()
классов. Для этого мы создадим файлы User.py
и Post.py
и импортируем их в наш проект.
User.py
Post.py
Внедрение JWT-аутентификации
JWT (веб-токен JSON) — это упрощенный токен, используемый для представления утверждений. В нашем проекте JWT будут представлять утверждения об идентичности, в частности, идентичности пользователя. Сначала установите пакет jwt
, запустив:
$~ pip install jwt
Теперь давайте добавим методы JWT в наш класс User.
Замените ‘SPR_SCRT_PSSWD’
более надежным паролем, предпочтительно случайным паролем.
Теперь всякий раз, когда пользователь пытается войти в систему, мы будем генерировать JWT, используя метод get_jwt()
. Этот токен будет храниться в файлах cookie пользователя. Если пользователь попытается открыть страницу, JWT будет передан на сервер вместе с другими файлами cookie, когда мы получим объект User
с помощью метода get_user_from_jwt()
.
Создание конечных точек
Конечные точки относятся к конечным точкам URL-адресов, которые в Retica запускают выполнение функции для получения ответа от сервера. У нас будут следующие конечные точки:
1. '/': домашняя страница
2. '/post/new': страница нового сообщения
3. '/post/{post_id} ': страница сообщений
4. '/login': страница входа в систему
5. '/signup': страница регистрации
6. '/admin': страница администратора
Давайте начнем с создания конечных точек для нашего приложения блога. Здесь мы также будем создавать классы обработчиков. Классы обработчиков позволяют нам определять отдельные функции для каждого метода (GET, POST, UPDATE, DELETE и т. д.). Мы будем использовать их для новой страницы сообщения, страницы входа, страницы регистрации и страницы администратора.
Все конечные точки
Контроль доступа
Следующим шагом в обеспечении безопасности нашего блог-приложения является создание контроля доступа. Мы не хотим, чтобы кто-либо мог получить доступ к странице администратора. Для этого мы будем использовать атрибут conditional
. Во-первых, мы создадим функцию, которая принимает только 1 аргументrequest
и возвращает True, если запрос авторизован, и False в противном случае. Условие также может возвращать разные ответы в зависимости от правильности запроса. Пользовательские коды ошибок в условных выражениях скоро будут реализованы.
Теперь эту функцию можно передать в качестве аргумента декоратору create_endpoint
.
@retica.create_endpoint("/admin", conditional=admin_only)
Эта конечная точка будет возвращать скрытый ответ, только если пользователь аутентифицирован как «администратор», или перенаправлять на страницу входа, если пользователь не аутентифицирован.
Заключительные комментарии
Это базовая часть нашего блог-приложения. В следующем посте мы реализуем интерфейс и интегрируем его с нашим сервером. Мы также реализуем страницу администратора, презентацию блога и редактор блога. Следите за обновлениями!