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

Создание применения Django Crud за считанные минуты

Чтобы оценить полезность любой бэкэнд -структуры, отличный лакмусовый тест – увидеть, как легко PLU … Tagged с Django, Python.

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

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

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

  1. Создайте новый вход в таблицу в базе данных.
  2. Прочитайте записи таблицы базы данных, либо извлек список всех записей, либо получая детали одной записи.
  3. Обновите существующую запись в базе данных, либо изменив определенные детали, либо заменив ее полностью новым.
  4. Удалите запись таблицы базы данных, удалив ее из базы данных, либо просто отметив ее как удаленную и деактивируя ее.

У Джанго есть способы сделать все это прямо из коробки, но я предпочитаю использовать структуру, написанную на вершине Джанго, называемого Django Rest Framework что делает вещи еще проще, предоставляя интуитивно понятный интерфейс разработчикам.

Я пишу все свои сообщения в блоге в приложении Apple Notes, прежде чем редактировать и опубликовать их, и мне пришло в голову, что приложение для приложения – отличный способ продемонстрировать приложение CRUD Анкет

Чтобы создать подобное приложение, нам нужна таблица баз данных, в которой хранится список заметок, состоящих из заголовка, контента и последней обновленной метки времени. Примечания отсортированы в соответствии с последней обновленной меткой времени.

Нам нужны следующие функции:

  1. Создание новой заметки с пустым названием и контентом.
  2. Обновление недавно созданной заметки с помощью заголовка и контента.
  3. Читая поля ноты.
  4. Частично обновляя заметку, изменяя либо плитку, либо контент.
  5. Перечисление всех заметок в базе данных, отсортированных по последней обновленной метке времени.
  6. Удаление записки, отметив ее как деактивированное.

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

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

# Step 1: create a python3 virtual environment called django_env
python3 -m venv django_env

# Step 2: Activate the virtual environment
source django_env/bin/activate

# Step 3: Install all the dependencies.
pip install django
pip install djangorestframework

# Step 4: Create a new django project called "notesapp" and enter it. Also create the initial database tables
django-admin startproject notesapp
cd notesapp
python manage.py migrate

# Step 5: Create a new application within your django project called "notes"
python manage.py startapp notes

Перед написанием API CRUD мы должны сначала создать модель базы данных, на которой мы хотим выполнить операции CRUD. Давайте создадим модель с названием Note в Notes/Models.py.

from django.db import models

class Note(models.Model):
    # both these fields can be empty when you create a new note for the first time
    title = models.CharField(max_length=255, null=True, blank=True)
    content = models.TextField(null=True, blank=True)

    # notes will be sorted using this field
    last_udpated_on = models.DateTimeField(auto_now=True)

    # to delete a note, we will simply set is_active to False
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

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

python manage.py makemigrations
python manage.py migrate

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

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

Определение сериализатора

Сериализатор отвечает за две вещи

  1. Чтобы подтвердить входящий запрос на создание/обновление и отклонить его, если поля не находятся в формате, который требуется для создания/обновления записи в таблице базы данных.
  2. Чтобы преобразовать вход в таблицу базы данных в такой формат, как JSON, который можно передать через Интернет в клиент. Давайте создадим сериализатор в Notes/Serializers.py следующим образом.

from rest_framework import serializers
from .models import Note


class NoteSerializer(serializers.ModelSerializer):
    is_active = serializers.BooleanField(read_only=True)

    class Meta:
        model = Note
        fields = ('id', 'title', 'content', 'last_udpated_on', 'is_active')

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

Мы также можем определить определенные поля как read_only, что указывает на то, что эти поля будут проигнорированы, если они присутствуют в запросе «Создание/обновление», но они будут присутствовать в ответе на запрос на чтение.

В этом вышеуказанном случае IS_ACTICE отвечает за указание, была ли заметка удалена или нет. Поэтому мы не должны разрешать его изменять через запрос создания/обновления, и он должен быть установлен на FALSE только при выполнении операции удаления. Это станет более ясным в предстоящих шагах.

Мы также можем определить поля как write_only, что будет указывать на то, что эти поля не будут присутствовать в ответе чтения, но мы позволим изменять поле в запросе создания/обновления. Теперь мы можем приступить к написанию API CRUD

Определение видового сбора API

В Django API записаны в виде. В нашем случае мы будем выполнять несколько операций на модели базы данных, и, следовательно, нам нужен вид. Вот как вы определяете один в примечаниях/views.py

from django.shortcuts import render, get_object_or_404

from rest_framework.viewsets import ModelViewSet
from .models import Note
from .serializers import NoteSerializer


class NoteViewSet(ModelViewSet):
    serializer_class = NoteSerializer

    def get_object(self):
        return get_object_or_404(Note, id=self.request.query_params.get("id"))

    def get_queryset(self):
        return Note.objects.filter(is_active=True).order_by('-last_udpated_on')

    def perform_destroy(self, instance):
        instance.is_active = False
        instance.save()

В настоящее время этот сет, способный выполнять все операции CRUD, и он будет использовать NateSerializer, чтобы определить, как будут получены данные и как они будут отправлены обратно запрашивающему клиенту.

Get_object отвечает за определение того, как объект получен. В этом случае мы ищем поле ID в параметрах запроса запроса и используем его для получения заметки. Этот метод также используется при выполнении операции обновления, потому что для обновления конкретной заметки нам придется сначала получить эту ноту.

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

Метод exect_delete определит, что делать при запросе операции удаления. В этом случае мы не хотим удалять строку из базы данных, и мы просто хотим деактивировать ее. Поэтому мы установим поле is_active на false и сохраняем ноту.

Определение пути URL

У нас есть еще один шаг, прежде чем мы увидим наши API в действии, и это определить, какой путь URL будет вызывать вышеуказанный сет. Это можно сделать в NotesApp/urls.py следующим образом.

from django.contrib import admin
from django.urls import path
from notes.views import NoteViewSet
from django.conf.urls import url

urlpatterns = [
    # the admin path is present by default when you create the Django profject. It is used to access the Django admin panel.
    path('admin/', admin.site.urls),

    # the URLs for your APIs start from here
    url(r'^note$', NoteViewSet.as_view(
        {
            'get': 'retrieve',
            'post': 'create',
            'put': 'update',
            'patch': 'partial_update',
            'delete': 'destroy'
        }
    )),
    url(r'^note/all$', NoteViewSet.as_view(
        {
            'get': 'list',
        }
    )),
]

Чтобы объяснить, что здесь происходит, мы в основном говорим, что если называется URL/Note, независимо от того, каков метод HTTP, мы будем вызовы на нотевиза этот взгляд

  1. Пост -вызов приведет к созданию операции модели Note.
  2. Вызов GET приведет к получению единого объекта модели примечания, используя параметр идентификационного запроса.
  3. Вызов PUT приведет к замене существующей модели примечания новой нотой, и существующая модель Note будет извлечена с использованием параметра ID -запроса.
  4. Пластичный вызов приведет к изменению только определенного поля внутри существующей модели примечания вместо того, чтобы полностью его заменить, и существующая модель Note будет извлечена с использованием параметра ID запроса.
  5. Вызов Delete приведет к вызову функции уничтожения, которая внутренне вызывает метод exat_destroy, определенный выше в Seeks.py. Если вы не заметили, в этом пути URL -адреса отсутствует одна вещь, и это способность перечислить все существующие объекты модели Note.

Чтобы решить это, я создал еще один путь URL/примечание/все, где я вызываю тот же сет, что и вышеуказанный, с разницей в том, что вызов GET теперь вызовет метод списка на счете просмотра вместо метода извлечения, что означает, что метод get_queryset Определено ранее будет вызвано.

Ладно, разговор, давайте теперь запустим сервер и просмотрите API в действии. Вы можете запустить сервер разработки Django, используя приведенную ниже команду, и он выставит ваш сервер на порте 8000 на Localhost.

python manage.py runserver

Пожалуйста, не забудьте включить REST_FRAMEWORD в раздел stasted_apps от NateparpApp/settings.py, или вы в конечном итоге увидите странные ошибки.

Чтобы увидеть наши API в действии, положите http://localhost: 8000/note? id = 1 В вашем браузере и быть встреченным довольно изящным пользовательским интерфейсом, созданным Django Rest Framework для проверки всех ваших API.

Вы также можете проверить свои API, используя Curl, как это

# Create a new note
curl -XPOST 'http://localhost:8000/note' 

# Update a note
curl -XPUT 'http://localhost:8000/note?id=1' -H 'Content-type: application/json' -d '{"title": "New blog post", "content": "Content of blog post"}'

# Partially update a note
curl -XPATCH 'http://localhost:8000/note?id=1' -H 'Content-type: application/json' -d '{"title": "Fresh blog post"}'

# Get a note
curl -XGET 'http://localhost:8000/note?id=1'

# Delete a note
curl -XDELETE 'http://localhost:8000/note?id=1'

Первоначально опубликовано в моем блоге

Оригинал: “https://dev.to/sankalpjonna/building-a-django-crud-application-in-minutes-5g0p”