Рубрики
Без рубрики

Здание фаунабина: Пастибин клон с Python и фауна

За последние пару месяцев я строил приложения с фауна, такой как телеграмма бота и … Теги от фауны, WebDev, Serverless, Python.

За последние пару месяцев я строил приложения с Фауна такие как телеграмма бота и а URL-поворотчик Отказ Это заинтересовало меня заинтересованным в строительстве больше, тем более, что Fauna делает его очень легко настроить и управлять базами данных без сервеса. Итак, я решил больше исследовать об этой базе данных и построить что-то более сложное.

В этой статье мы будем строить онлайн-инструмент для текстового склеивания, похожий на Пастибин используя Python, колбу и Фауна Отказ Мы также будем развернуть наше приложение к Heroku .

Мы собираемся построить пользовательский интерфейс для фаунабина с Flask-bootstrap который является расширением, которое позволяет легко интеграцию Bootstrap в колб приложения.

Мы будем строить две веб-страницы для фаунабина. Первым будет иметь текстовое поле, где пользователи могут вставить свои заметки (страницу вставки), а вторая страница позволит пользователям представить, что они вставлены (страница результатов).

Шаг 1: Установка необходимых библиотек

Нам нужно установить библиотеки колбу, так и флеш-загрузки через менеджер пакета Python (Pip).

$ pip install flask
$ pip install flask-bootstrap

Шаг 2: Настройка нашего сервера Flask

Откройте свой текстовый редактор, создайте файл с именем app.py, а затем сохраните код ниже.

from flask import Flask, render_template
from flask_bootstrap import Bootstrap

app = Flask(__name__)
Bootstrap(app)

@app.route("/")
def index():
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug=True)

Шаг 3: Создайте нашу страницу вставки

Страница пасты – это то, где пользователи предоставляются текстовое поле, чтобы вставить все, что они пожелают, с вариантами настройки их пасты (так же, как изображение выше).

Во-первых, создайте папку с именем Шаблоны в той же папке, что и наша app.py Отказ Папка шаблонов используется колбой для хранения его HTML-файлов, которые будут отображаться сервером в более поздних частях приложения. Наша папка проекта должна напоминать изображение ниже:

Создайте другой файл с именем index.html, который будет храниться в папке шаблонов и сохранить код ниже в нем.

{% extends "bootstrap/base.html" %}
{% block title %}Faunabin: Paste text and share with your friends{% endblock %}

{% block content %}

Faunabin

Paste text and share with your friends

Faunabin Paste Title

{% endblock %}

Когда мы бежим наше app.py Файл Мы должны получить ответ, похожий на изображение ниже:

Шаг 4: Создайте нашу страницу результатов

Страница результатов – это то, где пользователи просматривают пасты, которые были созданы на фаунабине. Во-первых, создайте файл с именем paste.html в Шаблоны Папка и сохранить код ниже в нем:

{% extends "bootstrap/base.html" %}
{% block title %}Paste Title{% endblock %}

{% block content %}

Faunabin

Paste text and share with your friends

View Faunabin Paste

{% endblock %}

Когда этот шаблон отображается, мы должны получить результат, аналогичный изображению ниже:

На данный момент наша структура папки проекта должна напоминать изображение ниже:

Шаг 1: Настройте нашу базу данных фауны

Первое, что нам нужно сделать, это создать базу данных для фаунабина в нашей панели фауны. Если вы не создали учетную запись на фауне до сих пор, создайте один здесь: https://dashboard.fauna.com/accounts/register

Укажите имя для вашей базы данных, затем нажмите Сохранить кнопка. Следующее, что нам нужно сделать, это создать коллекцию в нашей базе данных. Коллекция аналогична таблицам SQL, которая содержит данные с аналогичными характеристиками, которая содержит информацию о пользователей, которая содержит информацию о пользователях в базе данных. Мы начнем с нажатия Новая коллекция кнопка.

Затем мы поставляем имя для коллекции, мы будем создавать и работать с (мы будем использовать Pastes Для этого примера). Как только вы поставляете эту информацию, продолжайте, нажав Сохранить кнопка.

Нам также нужно создать индекс для нашей коллекции. Индекс Fauna позволяет нам просматривать данные, которые хранятся в коллекции базы данных, основанные на конкретных атрибутах. Чтобы создать один, перейдите к Обзор БД Вкладка на боковой панели фауны (левая сторона экрана) затем нажмите на Новый индекс кнопка.

Поставьте имя, которое вы хотите использовать для вашего индекса, установите условия на data.identifier Как мы будем использовать эту переменную для ссылки на наши пасты позже. Кроме того, не забудьте выбрать Уникальный Атрибут для нашего индекса это гарантирует, что у нас нет дубликата в наших записях базы данных.

Шаг 2: генерировать ключ API Fauna

Нам нужно будет создать ключ API Fauna для подключения к нашей базе данных из фаунабина. Для этого перейдите к настройкам безопасности на боковой панели фауны (левая сторона экрана).

Как только вы сделали это, вам будет представлен ваш ключ API (скрытый здесь для причин конфиденциальности). Ключ должен быть скопирован, как только он будет сгенерирован, то хранится где-то, вы можете легко получить его.

Шаг 3: Интегрировать фауну в Python

Далее нам нужно получить библиотеку Python для фауны. Он доступен на PIP и может быть установлен с одной строкой в нашем терминале.

$ pip install faunadb

После того, как это установлено, мы собираемся запустить пример код, указанный в документах драйвера Python Fauna Python https://docs.fauna.com/fauna/current/drivers/python.html.

from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient

client = FaunaClient(secret="your-secret-here")

indexes = client.query(q.paginate(q.indexes()))

print(indexes)

Код выше показывает, как драйвер Phauna Python подключается к базе данных с ключом API и печатает индексы, связанные с ней. Результат выполнения этого кода аналогичен изображению ниже.

Теперь, когда мы успешно интегрировали наш сценарий Python с фауной Давайте начнем с интеграцией фауны с пользовательским интерфейсом фаунаба, который мы создали ранее.

Шаг 1: Создание новых паст

Нам нужно взять вставить текст и Вставить название Из формы на странице индекса генерируйте уникальный идентификатор, а затем сохраните его в фауне. Наш обновленный app.py должен напоминать тот, что ниже:

import pytz
from datetime import datetime
from secrets import token_urlsafe
from flask import Flask, render_template, request, redirect
from flask_bootstrap import Bootstrap
from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient

app = Flask(__name__)
Bootstrap(app)
client = FaunaClient(secret="your-secret-here")


@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        title = request.form.get("title").strip()
        paste_text = request.form.get("paste-text").strip()

        identifier = token_urlsafe(5)
        paste = client.query(q.create(q.collection("pastes"), {
            "data": {
                "identifier": identifier,
                "paste_text": paste_text,
                "title": title,
                "date": datetime.now(pytz.UTC)
            }
        }))

        return redirect(request.host_url + identifier)
    return render_template("index.html")


if __name__ == "__main__":
    app.run(debug=True)

Мы использовали Создать Метод клиента FQL для хранения текста вставки и заголовок, как указано пользователем вместе со идентификатором вставки и датой создания в нашей коллекции базы данных, используя Client.Query (Q.create (Q.Collection (Collection_name), Данные)) .

Здесь мы импортировали пару функций из колбы, поэтому мы можем прочитать данные формы, генерировать уникальные идентификаторы и перенаправить пользователей на страницу сохраненной пасты. Мы можем увидеть наш недавно созданный документ в нашей панели фауны, когда мы создаем новую пасту.

Шаг 2: Чтение старых паст

Поскольку мы создали уникальный идентификатор для хранения каждой пасты, представленные пользователями на фаунабине, нам нужно создать маршрут в колбе, который примет идентификатор в качестве ввода, затем извлеките связанную пасту и отобразите данные пользователю. Наш обновленный код должен напоминать тот, который ниже:

import pytz
from datetime import datetime
from secrets import token_urlsafe
from flask import Flask, render_template, request, redirect, abort
from flask_bootstrap import Bootstrap
from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient

app = Flask(__name__)
Bootstrap(app)
client = FaunaClient(secret="your-secret-here")


@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        title = request.form.get("title").strip()
        paste_text = request.form.get("paste-text").strip()

        identifier = token_urlsafe(5)
        paste = client.query(q.create(q.collection("pastes"), {
            "data": {
                "identifier": identifier,
                "paste_text": paste_text,
                "title": title,
                "date": datetime.now(pytz.UTC)
            }
        }))

        return redirect(request.host_url + identifier)
    return render_template("index.html")


@app.route("//")
def render_paste(paste_id):
    try:
        paste = client.query(
            q.get(q.match(q.index("paste_by_identifier"), paste_id)))
    except:
        abort(404)

    return render_template("paste.html", paste=paste["data"])


if __name__ == "__main__":
    app.run(debug=True)

Мы использовали Получить Метод клиента FQL для получения данных вставки, которые мы сохранили в фауне, ранее, указав идентификатор вставки и индекса, мы хотим использовать с Client.Query (q.get (q.match (q.index (index_name), search_query)))) .

Мы также собираемся обновить наши paste.html. Мы хранили в нашем Шаблоны Папка для рендеров данных, которые мы проходим соответственно:

{% extends "bootstrap/base.html" %}
{% block title %}{{ paste.title }}{% endblock %}

{% block content %}

Faunabin

Paste text and share with your friends

View Faunabin Paste

{% endblock %}

Теперь, когда завораживается весь код для фаунабина, который является пастбиновым клоном, построенным с Python и Fauna.

Развертывание приложения означает, что вы загружаете его онлайн, чтобы он мог быть доступен для всех в любом месте в мире. В этой статье мы будем развернуть фаунабин на бесплатную и популярную платформу хостинга, называемую Heroku.

Предпосылки, необходимые для работы с Heroku, – это счет на Heroku, Heroku Cli и Git.

Шаг 1: Установить Gunicorn

Gunicorn – это Pure-Python HTTP-сервер для приложений WSGI. Это позволяет вам одновременно запустить любое приложение Python, запустив несколько процессов Python в пределах одного димно. Он обеспечивает идеальный баланс производительности, гибкости и простоты конфигурации при развертывании веб-приложения для того, чтобы где-то, например Heroku Отказ

$ pip install gunicorn

Шаг 2: Создайте файл WSGI

from app import app

if __name__ == "__main__":
    app.run()

Файл WSGI – это запись в наше приложение Python. Создайте файл с именем wsgi.py в той же папке, что и наша app.py и сохранить контент выше в нем. Наша структура файлов должна выглядеть так.

Шаг 3: генерировать файл требований

Следующим шагом является создание вашего требования .txt Файл с либо Пип заморозить или PipReqs Отказ Какой бы метод вы используете, убедитесь, что боевик находится в вашем файле требований.

$ pip freeze > requirements.txt

ИЛИ

$ pip install pipreqs
$ pipreqs .

Наша файловая структура и требования .txt следует выглядеть как изображение ниже.

Шаг 4: Создайте Proffile

web: gunicorn wsgi:app

А Procfile Используется для указания команд, которые должны быть выполнены приложением Heroku, когда они начинаются. Создайте файл с именем Procfile в той же папке, что и наша приложение и wsgi.py Затем сохраните контент выше в нем. Наша структура файлов должна выглядеть так.

Шаг 5: Создайте приложение Heroku

Перейдите к Создать новое приложение Вкладка на вашей панели инструментов Heroku, и вам будет представлен экран, аналогичный ниже. Выберите имя для вашего приложения и региона, оно должно быть развернуто.

Шаг 6: Развернуть фаунабин в Heroku

$ heroku login
$ git init
$ heroku git:remote -a faunabin
$ git add .
$ git commit -m "deploying to heroku"
$ git push heroku master

Поздравляю! Мы успешно развернули фаунабин в Heroku, и его можно добраться в любом месте в мире с помощью веб-адреса, который был предоставлен Heroku после развертывания. Поскольку имя приложения, создаваемого в этом руководстве Фаунабин его URL будет https://faunabin.herokuapp.com.

В этой статье мы построили онлайн-инструмент, аналогичный Пастерин С базой баз данных фауны и Python называется Фаунабин. Мы увидели, насколько легко интегрировать фауну в приложение Python, получил возможность исследовать свои функциональные возможности Crud, и, наконец, развернул фаунабин в Heroku.

Исходный код Фаунабин доступен на Github Отказ Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне в Twitter: @Lordghostx.

Оригинал: “https://dev.to/lordghostx/building-faunabin-a-pastebin-clone-with-python-and-fauna-436b”