Аббревиатура CRUD расшифровывается как CREATE, READ, UPDATE и DELETE. Они обозначают четыре основные функции, которые могут быть выполнены над набором данных. Каждая из этих функций представляет собой определенный метод HTTP.
В этой статье мы создадим проект django, который может создавать, читать, обновлять и удалять посты с нуля, чтобы продемонстрировать эти четыре концепции.
Как реализовать методы CRUD в Django
Создайте виртуальную среду с помощью
Активируйте виртуальную среду: (для пользователей Ubuntu):
Для пользователей windows:
Установите Django :q
Создайте проект django
Создайте приложение django
Мы начнем с создания модели для наших постов.
Убедитесь, что вы предварительно создали базу данных и связали ее в файле settings.py следующим образом:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': ‘<database name>’,
'USER': '<database user>',
'PASSWORD':'<password>',
}
}
NB если вы используете базу данных postgresql, вам нужно установить psycopg2, т.е. (pip install pyscopg2)
from django.db import models
# Create your models here.
class Posts(models.Model):
name = models.CharField(max_length = 50)
picture = models.ImageField()
author = models.CharField(max_length = 30, default="anonymous")
email = models.EmailField(blank = True)
describe = models.TextField(default = " Django tutorials")
def __str__(self):
return self.name
Сделайте модели известными базе данных, инициализировав миграции
А затем создайте миграции
Функция CREATE.
Функция CREATE переводится как http-метод POST. С помощью Create мы можем добавлять элементы в нашу базу данных/данные. В данном случае, чтобы иметь возможность добавлять посты в нашу базу данных. Нам нужно предоставить пользователям интерфейс для добавления постов, поэтому мы создаем файл forms.py в нашем приложении, а затем внутри него создаем форму, которая заимствует наши модели.
from django import forms
from .models import Posts
class PostCreate(forms.ModelForm):
class Meta:
model=Posts
fields='__all__'
Теперь мы переходим к нашему файлу views.py для создания логики. Убедитесь, что в начале файла views.py импортированы следующие элементы
from django.shortcuts import render, redirect
from .models import Posts
from .forms import PostCreate
from django.http import HttpResponse
def upload(request):
upload=PostCreate()
if request.method=='POST':
upload=PostCreate(request.POST,request.FILES)
if upload.is_valid():
upload.save()
return redirect('index')
else:
return HttpResponse("Your form is wrong")
else:
return render(request,'upload_form.html',{'upload_form':upload})
В нашей функции upload мы инициализируем переменную, которая хранит нашу форму, а затем указываем, что метод, на который мы ориентируемся, это метод POST, потому что мы хотим отправлять сообщения в нашу базу данных. Мы проверяем, правильно ли заполнена форма, если да, то сохраняем посты в базе данных. Если нет, мы отправляем сообщение об ошибке.
А если метод не является методом POST, мы возвращаем пустую форму.
ЧИТАТЬ
Это переводится как метод GET HTTP. Он помогает нам получить доступ ко всем постам, которые были сохранены в базе данных на данный момент.
Мы делаем это с помощью objects.all() для запроса всех постов, которые есть в базе данных.
def index(request):
posts=Posts.objects.all()
return render(request,'index.html',{'posts':posts})
UPDATE
Это переводится как HTTP-метод PUT. Он помогает нам не только получить доступ к постам, которые уже хранятся в базе данных, но и редактировать их и сохранять снова.
def update_post(request,post_id):
post_id=int(post_id)
try:
post_up=Posts.objects.get(id=post_id)
except Posts.DoesNotExist:
return redirect('index' )
post_form=PostCreate(request.POST or None,instance=post_up)
if post_form.is_valid():
post_form.save()
return redirect('index')
return render(request,'upload_form.html',{'upload_form':post_form})
Поскольку мы хотим получить доступ к посту, который уже хранится в базе данных, нам необходимо иметь способ ссылки на этот конкретный пост. Мы воспользуемся полем id, поскольку оно является первичным ключом, а это значит, что все посты имеют уникальные идентификаторы.
Мы инициализируем переменную, которая будет использоваться для хранения id поста, на который делается ссылка.
Используя try и except, мы проверяем, существует ли такой id в базе данных. Если нет, мы перенаправляем пользователя на функцию index. Если да, мы запрашиваем форму с данными, которые были в ней, затем проверяем, правильно ли они заполнены, если да, то сохраняем их и перенаправляем в функцию index.
DELETE
Это равносильно методу HTTP-запроса DELETE, что означает избавление от постов в базе данных. По логике это очень похоже на функцию update, так как мы будем использовать id поста для ссылки на пост, который хотим удалить. Для достижения этой функциональности мы используем метод .delete().
def delete_post(request,post_id):
post_id=int(post_id)
try:
post_up=Posts.objects.get(id=post_id)
except Posts.DoesNotExist:
return redirect('index')
post_up.delete()
return redirect('index')
Вывести
Функция создания
Используя нашу форму, мы добавляем новый пост и нажимаем на submit.
Функция чтения
Когда мы просматриваем нашу главную страницу, мы видим созданный нами пост.
Функция обновления
Мы воспользуемся кнопкой редактирования сообщения, чтобы изменить описание в нашем сообщении на «Собаки — преданные и красивые существа, из них получаются хорошие домашние животные». Нажав на кнопку редактирования, я перейду к форме со всем ее содержимым.
После редактирования я нажимаю кнопку отправить.
Проверив наш пост на главной странице, мы увидим, что его содержимое изменилось.
Функция удаления
Для удаления этого сообщения мы воспользуемся кнопкой delete. Нажав на кнопку, мы увидим, что пост больше не существует.
Заключение
Аббревиатура CRUD означает все основные операции, выполняемые в реляционных базах данных, таких как
Microsoft SQL Server, Oracle Database, MySQL и IBM DB2. Они используются в реальных приложениях, таких как сайты электронной коммерции, сайты социальных сетей. В самых простых формах методы CRUD используются для ведения записей студентов, записей сотрудников.