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

Выполнение операций CRUD с приложением CLI с использованием Firebase

Для следующего этапа в этой серии мы узнаем, как сделать приложение CLI для выполнения операций CRUD, то есть … Tagged с Python, Firebase, Crud.

Строительство приложений CLI с Python (9 Part Series)

Для следующего этапа в этой серии мы узнаем, как сделать приложение CLI для выполнения операций CRUD, то есть создание, получение, обновление и удаление данных. Мы будем использовать Firebase для хранения наших данных.

Что мы создадим

A Контакты приложение со следующей функциональностью:

# add a new contact with name=Peter and mobile=01034512
$ contacts add Peter --mobile 01034512
Contact Peter added!
{ 'mobile': '01034512' }
# view all contacts
$ contacts list
Here's a list of all your contacts:
{ ...  # list of all contacts }
# view single contact
$ contacts view Peter
{ 'mobile': '01034512' }

$ contacts view Meg
The contact you searched for doesn't exist
# update mobile number for Peter
$ contacts update Peter --mobile 00000
Contact updated!
{ 'mobile': '00000' }
# delete the contact Peter
$ contacts delete Peter
Contact deleted!

Этот пост немного длинный. Если вы просто хотите взглянуть на код или посмотреть, как работает приложение, проверьте Репо .

Настройка пожарной базы

Как упоминалось ранее, Firebase будет использоваться для хранения наших данных. Чтобы настроить базу данных, войдите в систему Firebase Используя свою учетную запись Google.

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

Как только проект будет создан, вы увидите Разработать боковая панель слева. Нажмите на База данных Чтобы настроить базу данных. Cloud Firestore будет отображаться как первый вариант, но это не то, что мы будем использовать. Прокрутите вниз, и вы увидите База данных в реальном времени вариант. Нажмите на Создать базу данных Анкет Далее вам будет представлено варианты безопасности.

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

Теперь для последнего шага в настройке базы данных нажмите на знак Little Plus + Чтобы добавить новый детский узел под названием контакты . Это будет держать наши контакты (очевидно 😅). Кроме того, добавьте тестовый контакт, чтобы увидеть, как будет структурирована база данных.

База данных теперь должна выглядеть так:

Настройка приложения

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

$ mkdir contacts-cli

$ cd contacts-cli

$ virtualenv env

$ . env/bin/activate

(env) $ mkdir app

(env) $ touch app/__init__.py

(env) $ touch setup.py

(env) $ touch .env

.env

Здесь будет храниться URL -адрес конечной точки API. Firebase предоставляет API REST Для базы данных, так что это то, что мы будем использовать. Если вы уже выполнили шаги и создали базу данных, просто возьмите ссылку, предоставленную в верхней части базы данных, и установите ее в своем .env файл.

export URL=https://[YOUR_PROJECT_ID].firebaseio.com

Обязательно бегите Анкет .env Чтобы загрузить переменные среды, в противном случае URL будет Нет Анкет

setup.py

Чтобы узнать больше о настройка Файл, вы можете вернуться к это сообщение.

from setuptools import setup, find_packages

setup(
        name="contacts",
        py_modules=find_packages(),
        install_requires=[
            "Click",
            "requests",
            ],
        entry_points="""
        [console_scripts]
        contacts=app:cli
        """,
        )

Затем запустить PIP установка -возмещаемое. в вашем терминале для установки приложения.

app/__ init__.py

import click

@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
    if ctx.invoked_subcommand is None:
        click.echo("Welcome to the contacts app 🥳")
        click.echo("Run contacts --help for options.")

Нам нужно использовать @click.group Чтобы мы могли включить подкоманды.

Если главная команда используется без какого-либо подколда, отображается приветственное сообщение. Как главная команда узнает, была ли подкоманда передана или нет? Глядя на контекст. Если ctx.invoked_subcommand нет , тогда не было пропущено подкоманда – покажите приветственное сообщение.

Теперь все настроено, поэтому мы можем начать работать над функциональностью.

Создание контактов

import os
import requests
import click

...

@cli.command()
@click.argument('name')
@click.option('--mobile', '-m', required=True)
def add(name, mobile):
    """
    Add a new contact
    """
    response = requests.put('{}/contacts/{}.json'
                            .format(os.getenv('URL'), name),
                            json={'mobile': '{}'.format(mobile)})
    click.echo('Contact {} added!'.format(name))
    click.echo(response.json())

Вы заметите, что я использовал Положить для запроса вместо СООБЩЕНИЕ . Я сделал это, чтобы избежать создания уникальных идентификаторов для моих данных на Firebase. Не стесняйтесь использовать СООБЩЕНИЕ Вместо этого и посмотрите, как вы можете работать с генерируемыми UID.

Добавить Команда принимает два параметра – A имя аргумент и Мобильный вариант. Оба требуются. Бег контакты добавить -help Показывает нам, какие варианты у нас есть.

(env) $ contacts add --help

Usage: contacts add [OPTIONS] NAME

  Add a new contact

Options:
  -m, --mobile TEXT  [required]
  --help             Show this message and exit.

Давайте добавим новый контакт:

(env) $ contacts add Chris -m 34243234
Contact Chris added!
{'mobile': '34243234'}

Получение всех контактов

...

@cli.command()
def list():
    """
    View all contacts
    """
    response = requests.get('{}/contacts.json'
                            .format(os.getenv('URL')))
    click.echo('Here\'s a list of all your contacts:')
    click.echo(response.json())

список Команда просто делает Получить Запрос на узле контактов и возвращает результат.

(env) $ contacts list
Here's a list of all your contacts:
{'Chris': {'mobile': '34243234'}, 'Peter': {'mobile': '8487344'}}

Получение одного контакта

...

@cli.command()
@click.argument('name')
def view(name):
    """
    View single contact
    """
    response = requests.get('{}/contacts/{}.json'
                            .format(os.getenv('URL'), name))
    if not response.json():
        click.echo("The contact you searched for does'nt exist")
    else:
        click.echo(response.json())

Просмотр Команда похожа на список , за исключением того, что это требует имя Аргумент и добавляет его в URL, чтобы вернуть контакт только для этого имени. Если имя не существует в базе данных, NULL возвращается. Мы пользуемся этим в Если Блок, чтобы вернуть соответствующий ответ.

(env) $ contacts view Peter
{'mobile': '8487344'}

(env) $ contacts view Meg
The contact you searched for doesn't exist

Обновление контакта

...

@cli.command()
@click.argument('name')
@click.option('--mobile', '-m', required=True)
def update(name, mobile):
    """
    Update contact
    """
    response = requests.patch('{}/contacts/{}.json'
                              .format(os.getenv('URL'), name),
                              json={'mobile': '{}'.format(mobile)})
    click.echo('Contact updated!')
    click.echo(response.json())

Это работает точно так же для команды Create, за исключением того, что мы используем Патч вместо Положить (Что, по -видимому, не имеет никакого значения здесь. Создание Патч На несуществующем узле его создает, точно так же, как Положить сделал бы. Попробуйте.)

(env) $ contacts update Peter -m 552
Contact updated!
{'mobile': '552'}

И наконец, Удаление контакта

Похоже на Просмотр командование Единственное изменение, которое мы сделаем, – это использование Удалить вместо Получить Анкет

...

@cli.command()
@click.argument('name')
def delete(name):
    """
    Delete contact
    """
    requests.delete('{}/contacts/{}.json'
                    .format(os.getenv('URL'), name))
    click.echo('Contact deleted!')

NULL возвращается при успешном удалении, поэтому нам не нужно возвращать отклик . Запрос называется непосредственно, и сообщение о успехе отображается после слов. Это можно сделать лучше, но пока это будет делать.

(env) $ contacts delete Peter
Contact deleted!

Я хотел охватить экспорт (написание) данных в локальный файл JSON или базу данных SQLite, но этот пост уже слишком длинный 😅. Это интересные вещи, чтобы попробовать, если вы хотите узнать больше.

В следующем посте мы добавим тесты в приложение с помощью Pytest.

Строительство приложений CLI с Python (9 Part Series)

Оригинал: “https://dev.to/wangonya/performing-crud-operations-with-a-cli-app-using-firebase-2h3e”