L o a d i n g
Создание Блога на Django с GitHub, CKEditor и WebP: Закрепляем Основы Linux Ubuntu

Введение

После завершения первого проекта на Django, важно продолжать практиковаться и углублять свои знания. Для этого я решил разработать новый проект — блог на Django, с добавлением таких современных инструментов и технологий, как GitHub для версионного контроля, CKEditor для редактирования контента и WebP для сжатия изображений. В этом проекте я также добавлю новые поля и реализую выбор зависимостей, чтобы закрепить основные принципы работы с фреймворком.

Почему Блог с Дополнительными Инструментами?

Создание блога с использованием GitHub, CKEditor и WebP позволяет не только закрепить базовые навыки Django, но и освоить дополнительные инструменты и библиотеки. Это делает проект более реалистичным и приближенным к современным стандартам веб-разработки.

Основные Шаги Разработки

Шаг 1: Инициализация Проекта и GitHub

Начнем с создания нового проекта и инициализации репозитория GitHub.

  1. Создание проекта и приложения:

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 позволяет закрепить основные принципы работы с фреймворком, а также освоить дополнительные инструменты и библиотеки. Добавление новых полей и логики делает проект более гибким и приближенным к реальным задачам веб-разработки. Такой проект не только помогает развивать навыки, но и служит отличным учебным пособием и примером современного веб-приложения.

Написать комментарий

Вы можете оставить комментарий автору статьи Обязательные поля помечены *