Введение
После завершения первого проекта на Django, важно продолжать практиковаться и углублять свои знания. Для этого я решил разработать новый проект — блог на Django, с добавлением таких современных инструментов и технологий, как GitHub для версионного контроля, CKEditor для редактирования контента и WebP для сжатия изображений. В этом проекте я также добавлю новые поля и реализую выбор зависимостей, чтобы закрепить основные принципы работы с фреймворком.
Почему Блог с Дополнительными Инструментами?
Создание блога с использованием GitHub, CKEditor и WebP позволяет не только закрепить базовые навыки Django, но и освоить дополнительные инструменты и библиотеки. Это делает проект более реалистичным и приближенным к современным стандартам веб-разработки.
Основные Шаги Разработки
Шаг 1: Инициализация Проекта и GitHub
Начнем с создания нового проекта и инициализации репозитория GitHub.
- Создание проекта и приложения:
django-admin startproject blog_project
cd blog_project
django-admin startapp blog
2. Инициализация Git и создание репозитория на GitHub:
git init
git remote add origin <URL_вашего_репозитория>
git add .
git commit -m "Initial commit"
git push -u origin master
Шаг 2: Настройка CKEditor
Для редактирования контента будем использовать CKEditor. Установим его:
pip install django-ckeditor
Добавим CKEditor в INSTALLED_APPS
в settings.py
и настроим его:
INSTALLED_APPS = [
...
'ckeditor',
'ckeditor_uploader',
]
CKEDITOR_UPLOAD_PATH = "uploads/"
Шаг 3: Настройка Сжатия Изображений в WebP
Для сжатия изображений будем использовать библиотеку Pillow. Установим её:
pip install pillow
Изменим модель поста, чтобы автоматически конвертировать изображения в формат WebP:
from PIL import Image
from django.db import models
from django.utils import timezone
import os
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
author = models.CharField(max_length=100)
image = models.ImageField(upload_to='images/')
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
img = img.convert("RGB")
webp_path = os.path.splitext(self.image.path)[0] + ".webp"
img.save(webp_path, "webp")
Шаг 4: Добавление Новых Полей и Логики
Для разнообразия добавим поле с выбором зависимости:
class Post(models.Model):
DEPENDENCY_CHOICES = [
('D1', 'Dependency 1'),
('D2', 'Dependency 2'),
('D3', 'Dependency 3'),
]
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
author = models.CharField(max_length=100)
image = models.ImageField(upload_to='images/')
dependency = models.CharField(max_length=2, choices=DEPENDENCY_CHOICES)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
img = img.convert("RGB")
webp_path = os.path.splitext(self.image.path)[0] + ".webp"
img.save(webp_path, "webp")
Шаг 5: Обновление Административного Интерфейса
Обновим admin.py
, чтобы использовать CKEditor для редактирования контента:
from django.contrib import admin
from .models import Post
from ckeditor.widgets import CKEditorWidget
from django import forms
class PostAdminForm(forms.ModelForm):
content = forms.CharField(widget=CKEditorWidget())
class Meta:
model = Post
fields = '__all__'
class PostAdmin(admin.ModelAdmin):
form = PostAdminForm
admin.site.register(Post, PostAdmin)
Заключение
Создание блога на Django с использованием GitHub, CKEditor и WebP позволяет закрепить основные принципы работы с фреймворком, а также освоить дополнительные инструменты и библиотеки. Добавление новых полей и логики делает проект более гибким и приближенным к реальным задачам веб-разработки. Такой проект не только помогает развивать навыки, но и служит отличным учебным пособием и примером современного веб-приложения.
Написать комментарий