Чтобы оценить полезность любой бэкэнд -структуры, отличный лакмусовый тест состоит в том, чтобы увидеть, насколько легко подключить базу данных к вашему приложению и разоблачить модели базы данных клиенту с помощью 4 операций – создавать, читать, обновить и удалять.
Эта функциональность решает большую часть ваших проблем, особенно если вы создаете продукт, который более тяжелый, и вы хотите потратить как можно меньшую пропускную способность на создание ваших API.
Сервер приложений – это не что иное, как уровень в верхней части базы данных, которая дает возможность клиентского приложения выполнять следующие базовые операции.
- Создайте новый вход в таблицу в базе данных.
- Прочитайте записи таблицы базы данных, либо извлек список всех записей, либо получая детали одной записи.
- Обновите существующую запись в базе данных, либо изменив определенные детали, либо заменив ее полностью новым.
- Удалите запись таблицы базы данных, удалив ее из базы данных, либо просто отметив ее как удаленную и деактивируя ее.
У Джанго есть способы сделать все это прямо из коробки, но я предпочитаю использовать структуру, написанную на вершине Джанго, называемого Django Rest Framework что делает вещи еще проще, предоставляя интуитивно понятный интерфейс разработчикам.
Я пишу все свои сообщения в блоге в приложении Apple Notes, прежде чем редактировать и опубликовать их, и мне пришло в голову, что приложение для приложения – отличный способ продемонстрировать приложение CRUD Анкет
Чтобы создать подобное приложение, нам нужна таблица баз данных, в которой хранится список заметок, состоящих из заголовка, контента и последней обновленной метки времени. Примечания отсортированы в соответствии с последней обновленной меткой времени.
Нам нужны следующие функции:
- Создание новой заметки с пустым названием и контентом.
- Обновление недавно созданной заметки с помощью заголовка и контента.
- Читая поля ноты.
- Частично обновляя заметку, изменяя либо плитку, либо контент.
- Перечисление всех заметок в базе данных, отсортированных по последней обновленной метке времени.
- Удаление записки, отметив ее как деактивированное.
Я буду выполнять все шаги, связанные с созданием этого приложения, но сначала давайте начнем с оснований.
Существует некоторый базовый код шаблона, связанный с созданием любого приложения 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 в действии.
Для этого вы должны сначала определить сериализатор для модели базы данных, которую вы создали на вышеуказанном шаге.
Определение сериализатора
Сериализатор отвечает за две вещи
- Чтобы подтвердить входящий запрос на создание/обновление и отклонить его, если поля не находятся в формате, который требуется для создания/обновления записи в таблице базы данных.
- Чтобы преобразовать вход в таблицу базы данных в такой формат, как 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, мы будем вызовы на нотевиза этот взгляд
- Пост -вызов приведет к созданию операции модели Note.
- Вызов GET приведет к получению единого объекта модели примечания, используя параметр идентификационного запроса.
- Вызов PUT приведет к замене существующей модели примечания новой нотой, и существующая модель Note будет извлечена с использованием параметра ID -запроса.
- Пластичный вызов приведет к изменению только определенного поля внутри существующей модели примечания вместо того, чтобы полностью его заменить, и существующая модель Note будет извлечена с использованием параметра ID запроса.
- Вызов 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”