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

Создайте и разверните безвременный URL -оборот с Python и Fauna

Недавно я изучал и экспериментировал с базами данных без серверов и создал бот Telegram … Tagged Fauna, Serverless, Python, WebDev.

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

Уравновешитель URL -адреса – это услуга, которая сокращает длинные веб -адреса, что делает их легко общимися в социальных сетях. Они работают, генерируя короткий идентификатор для представления длинного веб -адреса. Таким образом, когда пользователь передает идентификатор на платформу, он автоматически перенаправляется на исходный URL.

В этой статье мы будем создавать простой сокращение URL -адреса, используя язык программирования Python, Flask Web Framework и Без серверную базу данных, Фауна Анкет Мы также будем развертывать наше приложение в Heroku.

Фауна это база данных без сервера, которая предлагает два интерфейса, GraphQL и язык запросов FAUNA (FQL). Он может хранить коллекции, индексы и даже другие базы данных (многоцелевые). Вот несколько причин для использования фауны:

  • Фауна очень легко выучить и интегрировать в проекты.
  • Увеличение производительности, поскольку фауна обрабатывает много операций базы данных под капюшоном для вас.
  • Фауна обеспечивает бесконечную масштабируемость для ваших проектов.
  • Фауна позволяет вам моделировать любые данные, которые требуются вашим бизнесом, например, отношения, документы, графики или комбинацию.
  • FAUNA предоставляет собственную поддержку GraphQL для вашей базы данных, а также функциональные возможности, такие как транзакции, пользовательская логика и управление доступом.
  • Базы данных FAUNA имеют низкую задержку, поэтому вы можете обслуживать своих пользователей повсюду с последовательными данными, которые реплицируются в режиме реального времени в нескольких регионах и обслуживаются из ближайших мест для них.

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

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

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

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

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

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

Шаг 2: создание ключа API фауны

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

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

Шаг 3: Интеграция фауны с Python

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

$ pip install faunadb

После того, как это будет установлено, мы собираемся запустить пример кода, предоставленного в документах драйвера 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)

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

Теперь, когда мы успешно интегрировали наш сценарий Python с фауной, давайте начнем с создания нашего укорочения с помощью колбы. Чтобы все было просто, мы будем создавать наше приложение в качестве API вместо веб-приложения с полным стеком с HTML и CSS.

Шаг 1: Настройка нашего сервера колбы

Нам нужно установить библиотеку Flask так же, как мы установили фауну раньше, используя PIP и наш терминал.

$ pip install flask

Давайте получим базовый сервер, работающий в колбе, который отобразит текст Привет, мир При открытии. Создайте новую папку проекта и файл Python с именем app.py и введите следующий код внутри.

from flask import Flask

app = Flask(__name__)


@app.route("/")
def home():
    return "Hello World!"


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

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

Если вы получите это, вы на правильном пути. Откройте следующее в своем браузере http://127.0.0.1:5000 Чтобы получить доступ к приложению.

Шаг 2: Создайте функцию сокращения

Это основная часть нашего приложения, нам нужна функция, которая генерирует случайную строку, которая будет послужить нашим идентификатором для наших сокращенных URL -адресов.

import string
import random

def generate_identifier(n=6):
    identifier = ""
    for i in range(n):
        identifier += random.choice(string.ascii_letters)
    return identifier

Мы использовали выбор Метод в случайный Библиотека, чтобы случайно выбрать букву, предоставленную string.ascii_letters Затем переменная объединила результаты для генерации случайной строки. Когда мы запускаем эту функцию, мы должны получить результаты, подобные тем, которые на изображении ниже.

Вы также можете посмотреть на Newid функция Функция, предоставленная фауной, которая может использоваться для генерации случайных чисел, основанных на времени, которые гарантированно будут уникальными во всем кластере вашей базы данных. Кроме того, после того, как они сгенерировали, они никогда не могут быть сгенерированы во второй раз.

Шаг 3: Постройте конечную точку сокращения

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

import string
import random
from flask import Flask, jsonify, request
from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient

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


def generate_identifier(n=6):
    identifier = ""
    for i in range(n):
        identifier += random.choice(string.ascii_letters)
    return identifier


@app.route("/")
def home():
    return "Hello World!"


@app.route("/generate//")
def generate(address):
    identifier = generate_identifier()
    client.query(q.create(q.collection("urls"), {
        "data": {
            "identifier": identifier,
            "url": address
        }
    }))

    shortened_url = request.host_url + identifier
    return jsonify({"identifier": identifier, "shortened_url": shortened_url})


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

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

Здесь мы импортировали jsonify Метод из колбы, который используется в API REST для возврата данных JSON и Запрос переменная Таким образом, мы можем получить доступ к данным нашему браузеру, отправленному на сервер вместе с его запросом. Когда мы получаем доступ к этой конечной точке в нашем браузере, мы должны получить ответ, аналогичный этому. Мы также можем увидеть наш недавно созданный документ на нашей панели панели фауны.

Шаг 4: Напишите логику перенаправления URL

Единственное, что осталось, – это создание логики, которая перенаправляет пользователя на исходный URL, когда он получит сокращенный URL. Чтобы это работало, мы создали бы конечную точку, которая будет воспринимать идентификатор в качестве ввода, запросить нашу базу данных, а затем перенаправить пользователя на исходный URL -адрес, если он существует, или отобразить страницу 404, если это не так.

@app.route("//")
def fetch_original(identifier):
    try:
        url = client.query(q.get(q.match(q.index("urls_by_identifier"), identifier)))
    except:
        abort(404)

    return redirect(url["data"]["url"])

Мы импортировали еще 2 метода из колбы ( прервать и перенаправление ); прервать Остановит код, который работает в настоящее время, и запустит ответ предоставленного кода состояния, в то время как перенаправление перенаправят пользователя на другой веб -адрес, либо на вашем сервере, либо на внешнем. Полный код должен напоминать тот, который ниже.

import string
import random
from flask import Flask, jsonify, request, abort, redirect
from faunadb import query as q
from faunadb.objects import Ref
from faunadb.client import FaunaClient

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


def generate_identifier(n=6):
    identifier = ""
    for i in range(n):
        identifier += random.choice(string.ascii_letters)
    return identifier


@app.route("/")
def home():
    return "Hello World!"


@app.route("/generate//")
def generate(address):
    identifier = generate_identifier()
    client.query(q.create(q.collection("urls"), {
        "data": {
            "identifier": identifier,
            "url": address
        }
    }))

    shortened_url = request.host_url + identifier
    return jsonify({"identifier": identifier, "shortened_url": shortened_url})


@app.route("//")
def fetch_original(identifier):
    try:
        url = client.query(q.get(q.match(q.index("urls_by_identifier"), identifier)))
    except:
        abort(404)

    return redirect(url["data"]["url"])


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

Теперь это завершает весь код для нашей службы сокращения URL с Python и Fauna.

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

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

Шаг 1: Установите оружие

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

$ pip install gunicorn

Шаг 2: Создайте wsgi.py файл

from app import app

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

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

Шаг 3: Сгенерируйте свой файл retements.txt

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

$ pip freeze > requirements.txt

ИЛИ ЖЕ

$ pip install pipreqs
$ pipreqs .

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

Шаг 4: Создайте прокат

web: gunicorn wsgi:app

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

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

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

Шаг 6: Разверните наше приложение в Heroku

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

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

Теперь мы развернули наше веб -приложение в Heroku, мы можем сократить URL -адреса, используя генерировать конечная точка.

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

Исходный код приложения доступен на GitHub Анкет Если у вас есть какие -либо вопросы, не стесняйтесь обращаться ко мне в Twitter: @Lordghostx

Оригинал: “https://dev.to/lordghostx/build-and-deploy-a-serverless-url-shortener-with-python-and-fauna-3077”