0% нашли этот документ полезным (0 голосов)
3 просмотров14 страниц

Blog Project Scaffold

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

Загружено:

uukbekovass
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате DOCX, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
3 просмотров14 страниц

Blog Project Scaffold

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

Загружено:

uukbekovass
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате DOCX, PDF, TXT или читать онлайн в Scribd

Блог (Blog)

● Суть: Сайт, где администратор (вы) может публиковать статьи (посты), а


пользователи могут их читать.
● Модели (Models):
○ Post (Пост): с полями title (заголовок), content (содержимое),
pub_date (дата публикации).
○ Category (Категория): (опционально, для усложнения) с полем
name и связью ForeignKey к Post.
● Что изучает студент:
○ Создание моделей и миграции базы данных.
○ Работу с Admin-панелью (добавление, редактирование постов).
○ Views (Представления): Создание "списка постов" (list view) и
"детальной страницы" (detail view).
○ URLs (Маршруты): Как сделать красивые URL (например,
/post/my-first-post/).
○ Templates (Шаблоны): Как вывести данные в HTML, используя
циклы ({% for %}) и переменные ({{ [Link] }}).
Создание проекта "Блог"

Шаг 1: Настройка проекта и виртуальной среды


Первым делом, откройте командную строку (CMD или PowerShell).
Перейдите в вашу рабочую папку:
cd C:\django
Создайте виртуальную среду. Это изолированное окружение, чтобы не
смешивать библиотеки разных проектов. Назовем ее venv.
python -m venv venv
Активируйте ее:
venv\Scripts\activate
(Ваша командная строка теперь должна начинаться с (venv))
Установите Django:
pip install django
Создайте проект Blog. Обратите внимание на точку . в конце — она говорит
Django создать проект прямо в текущей папке (C:\django), а не создавать
лишнюю вложенную папку.
django-admin startproject Blog .
Что изучает студент: Вы только что использовали django-admin для
создания скелета проекта. У вас появился файл [Link] (для
управления проектом) и папка Blog (с настройками).
Создайте "приложение" (app) posts. В Django проект (Project) — это весь
сайт. Приложение (App) — это отдельный модуль сайта (например, блог,
форум, магазин).
Bash
python [Link] startapp posts

Что изучает студент: Вы создали отдельный, переиспользуемый


модуль posts, где будет вся логика, связанная с постами.
Зарегистрируйте приложение в проекте. Откройте файл C:\django\Blog\
[Link] в вашем редакторе кода. Найдите список INSTALLED_APPS и
добавьте 'posts' (или '[Link]') в конец.
Python
# C:\django\Blog\[Link]

INSTALLED_APPS = [
'[Link]',
'[Link]',
'[Link]',
'[Link]',
'[Link]',
'[Link]',
'posts', # <-- ДОБАВЬТЕ ЭТУ СТРОКУ
]

Шаг 2: Создание моделей (Models)


Модель — это Python-класс, который описывает таблицу в базе данных.
1. Откройте файл C:\django\posts\[Link].
2. Напишем нашу модель Post.
3. Python
# C:\django\posts\[Link]

from [Link] import models

class Post([Link]):
title = [Link](max_length=200, verbose_name="Заголовок")
content = [Link](verbose_name="Содержимое")
pub_date = [Link](auto_now_add=True, verbose_name="Дата
публикации")

def __str__(self):
return [Link]

class Meta:
verbose_name = "Пост"
verbose_name_plural = "Посты"
ordering = ['-pub_date'] # Сортировка по-умолчанию (новые сверху)

● Что изучает студент:


○ [Link]: Вы наследуете свой класс от этого, чтобы Django
"понял", что это модель.
○ CharField, TextField, DateTimeField: Это типы полей, которые
превращаются в типы колонок в SQL-базе.
○ auto_now_add=True: Автоматически ставит дату и время создания
поста.
○ __str__(self): Это "человекочитаемое" имя объекта. Вы увидите
[Link] в админке вместо "Post object (1)".
○ Meta: Дополнительные настройки. verbose_name — имя в админке,
ordering — как сортировать посты при извлечении из базы.

Шаг 3: Миграции базы данных


Вы описали модели, но в базе данных (пока это db.sqlite3 в папке проекта) этих
таблиц еще нет. Миграции — это "инструкции" для базы, как ей измениться.
Создайте файл миграции:
Bash
python [Link] makemigrations posts

(Django проанализирует posts/[Link] и создаст файл в posts/migrations/,


описывающий создание таблицы Post).
Примените миграцию к базе:
Bash
python [Link] migrate

(Эта команда выполнит все необработанные миграции, включая встроенные от


Django (для пользователей, админки) и нашу новую).
● Что изучает студент: Вы поняли двухэтапный процесс изменения схемы
БД: makemigrations (создать чертеж) и migrate (построить по чертежу).

Шаг 4: Админ-панель (Admin)


Django дает вам "из коробки" мощную админ-панель.
Создайте супер-пользователя (администратора):
Bash
python [Link] createsuperuser

(Следуйте инструкциям: введите логин, email (можно пропустить) и пароль).


Зарегистрируйте модель в админке. Откройте C:\django\posts\[Link] и
добавьте Post.
Python
# C:\django\posts\[Link]

from [Link] import admin


from .models import Post # Импортируем нашу модель

[Link](Post) # Регистрируем ее

Проверьте! Запустите сервер:


Bash
python [Link] runserver

Откройте в браузере [Link]


Войдите, используя логин и пароль, которые вы только что создали.
Вы должны увидеть секцию "POSTS" и модель "Посты".
Нажмите "Добавить" и создайте 2-3 тестовых поста.
● Что изучает студент: Вы научились "включать" свои модели в админку с
помощью [Link]() и управлять контентом сайта без написания
кода.

Шаг 5: Представления (Views)


View (представление) — это функция или класс, который принимает веб-запрос
и возвращает веб-ответ. Он решает, какие данные и как (в каком шаблоне)
показать пользователю.
Мы будем использовать "Class-Based Views" (CBV) — это современный и
удобный способ.
1. Откройте C:\django\posts\[Link].
2. Нам нужно два представления: список всех постов и страница одного
поста.
3. Python
# C:\django\posts\[Link]

from [Link] import ListView, DetailView


from .models import Post

class PostListView(ListView):
model = Post
template_name = 'posts/post_list.html' # Шаблон, который будет
использоваться
context_object_name = 'posts' # Имя переменной в шаблоне

class PostDetailView(DetailView):
model = Post
template_name = 'posts/post_detail.html' # Шаблон для одного поста
context_object_name = 'post' # Имя переменной в шаблоне

● Что изучает студент:


○ ListView: Встроенный класс, который "знает", как получить список
объектов ([Link]()) и передать его в шаблон.
○ DetailView: Встроенный класс, который "знает", как получить один
конкретный объект (по его id или pk из URL) и передать его в
шаблон.
○ template_name: Вы явно указываете, какой HTML-файл рендерить.
○ context_object_name: Вы задаете имя переменной, которую будете
использовать в HTML (например, {% for post in posts %}).
Шаг 6: Маршруты (URLs)
URLs — это "диспетчер" Django. Он смотрит на URL, который запросил
пользователь, и решает, какое представление (view) должно его обработать.
Это двухэтапный процесс.
1. Главный [Link] (Проекта)
Откройте C:\django\Blog\[Link]. Нам нужно "подключить" все URL-адреса
из нашего приложения posts.
2. Python
# C:\django\Blog\[Link]

from [Link] import admin


from [Link] import path, include # <-- Убедитесь, что 'include' есть

urlpatterns = [
path('admin/', [Link]),
path('', include('[Link]')), # <-- ДОБАВЬТЕ ЭТУ СТРОКУ
]

Что изучает студент: Вы сказали главному диспетчеру: "Все, что


приходит на главный адрес сайта ( '' ), перенаправляй на обработку в
файл [Link]".
[Link] (Приложения)
Этого файла нет, его нужно создать:
Создайте файл C:\django\posts\[Link].
Python
# C:\django\posts\[Link] (НОВЫЙ ФАЙЛ)

from [Link] import path


from .views import PostListView, PostDetailView # Импортируем наши Views

urlpatterns = [
# Главная страница (список постов)
path('', PostListView.as_view(), name='post-list'),

# Страница одного поста


# <int:pk> - это "захват" части URL. Django возьмет число из URL,
# назовет его 'pk' (Primary Key) и передаст в DetailView.
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
]

● Что изучает студент:


○ Вы создали URL-маршруты для своего приложения.
○ path(): Функция, связывающая URL-путь с View.
○ .as_view(): Метод для превращения Class-Based View в обычную
функцию-представление.
○ <int:pk>: Вы научились создавать динамические URL. Теперь
/post/1/, /post/5/ и /post/42/ будут обрабатываться одним
представлением (PostDetailView).
○ name='...': Вы дали "имя" каждому URL. Это очень важно для
использования в шаблонах!
Шаг 7: Шаблоны (Templates)
Шаблоны — это HTML-файлы с "дырками", куда Django вставляет данные из
Views.
1. Создайте папки. По-умолчанию, Django ищет шаблоны в папке
templates внутри каждого приложения.
○ Внутри C:\django\posts\ создайте папку templates.
○ Внутри C:\django\posts\templates\ создайте еще одну папку posts.
2. Структура должна быть такой:
C:\django\posts\
templates\
posts\
post_list.html
post_detail.html

3. (Эта вложенность posts/templates/posts/ называется "namespacing" и


нужна, чтобы шаблоны с одинаковыми именами из разных приложений
не конфликтовали).
4. Создайте post_list.html (Список постов):
5. HTML
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Мой Блог</title>
<style> body { font-family: sans-serif; max-width: 800px; margin: auto; padding:
20px; } </style>
</head>
<body>
<h1>Добро пожаловать в мой блог!</h1>
<hr>

{% for post in posts %}


<article>
<h2>
<a href="{% url 'post-detail' [Link] %}">{{ [Link] }}</a>
</h2>
<p><i>Опубликовано: {{ post.pub_date }}</i></p>
<p>{{ [Link]|truncatewords:30 }}</p> </article>
<hr>
{% endfor %}

</body>
</html>

Создайте post_detail.html (Один пост):


HTML
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ [Link] }}</title>
<style> body { font-family: sans-serif; max-width: 800px; margin: auto; padding:
20px; } </style>
</head>
<body>

<h1>{{ [Link] }}</h1>


<p><i>Опубликовано: {{ post.pub_date }}</i></p>

<hr>

<div>
{{ [Link]|linebreaks }}
</div>

<hr>
<a href="{% url 'post-list' %}"> &larr; Назад ко всем постам</a>

</body>
</html>

● Что изучает студент:


○ {{ [Link] }}: Переменные. Django подставляет сюда значения из
объекта post.
○ {% for post in posts %} ... {% endfor %}: Теги (Циклы). Вы
перебираете список posts, который пришел из PostListView.
○ {% url 'post-detail' [Link] %}: Теги (URL). Вы создаете
динамическую ссылку, не прописывая URL вручную (т.е. не
href="/post/{{ [Link] }}/"). Это правильный способ.
○ |linebreaks, |truncatewords:30: Фильтры. Это простые способы
форматировать данные прямо в шаблоне.

Шаг 8: Запуск и Проверка


Убедитесь, что вы (или создали в админке) хотя бы 1-2 поста.
1. Запустите сервер (если он еще не запущен):
2. Bash
python [Link] runserver

3. Откройте [Link]
○ Вы должны увидеть свой post_list.html со списком постов.
4. Нажмите на заголовок любого поста.
○ Вас должно перекинуть на [Link] (или /post/2/
и т.д.).
○ Вы должны увидеть post_detail.html с полным текстом этого поста.
5. Нажмите "Назад ко всем постам".
○ Вы должны вернуться на главную.
Шаг 9: Добавляем Категории
1. Модель (posts/[Link]):
Добавьте перед классом Post новую модель Category. Затем добавьте
поле category в модель Post.
2. Python
# C:\django\posts\[Link]

# ... (импорты) ...

class Category([Link]):
name = [Link](max_length=100, verbose_name="Название
категории")

def __str__(self):
return [Link]

class Meta:
verbose_name = "Категория"
verbose_name_plural = "Категории"

class Post([Link]):
title = [Link](max_length=200, verbose_name="Заголовок")
content = [Link](verbose_name="Содержимое")
pub_date = [Link](auto_now_add=True, verbose_name="Дата
публикации")

# НОВОЕ ПОЛЕ
category = [Link](
Category,
on_delete=models.SET_NULL, # Если удалить категорию, посты не
удалятся
null=True, # Разрешаем полю быть пустым в БД
blank=True, # Разрешаем полю быть пустым в админке
verbose_name="Категория"
)

# ... (остальной код Post) ...

Миграции:
Bash
python [Link] makemigrations posts
python [Link] migrate

Админка (posts/[Link]):
Зарегистрируйте новую модель.
Python
# C:\django\posts\[Link]

from [Link] import admin


from .models import Post, Category # <-- Добавляем Category

[Link](Post)
[Link](Category) # <-- Регистрируем Category
Шаблоны (post_detail.html):
Выведем категорию на странице поста, если она есть.
Добавьте этот блок после даты в post_detail.html:
HTML
...
<h1>{{ [Link] }}</h1>
<p><i>Опубликовано: {{ post.pub_date }}</i></p>

{% if [Link] %}
<p><strong>Категория: {{ [Link] }}</strong></p>
{% endif %}

<hr>
...
○ Что изучает студент: Вы создали связь ForeignKey (Многие-к-
Одному), разобрались с on_delete и научились использовать тег
{% if %} в шаблонах.
Теперь в админке вы можете сначала создать категории, а затем при
редактировании поста выбирать их из выпадающего списка.
Проект Django: Пошаговое руководство по созданию блога
Папка проекта: C:\django
Название проекта: Blog

---

## Шаг 1: Настройка проекта и виртуальной среды

1. **Откройте командную строку (CMD или PowerShell).**

2. **Перейдите в вашу рабочую папку:**


cd C:\django

3. **Создайте виртуальную среду (venv):**


python -m venv venv

4. **Активируйте ее:**
venv\Scripts\activate
(Ваша командная строка теперь должна начинаться с (venv))

5. **Установите Django:**
pip install django

6. **Создайте проект `Blog` (точка `.` в конце важна):**


django-admin startproject Blog .

7. **Создайте приложение (app) `posts`:**


python [Link] startapp posts

8. **Зарегистрируйте приложение в проекте.** Откройте файл `C:\django\Blog\


[Link]`.
Найдите `INSTALLED_APPS` и добавьте `'posts'`.

INSTALLED_APPS = [
# ... (другие приложения) ...
'[Link]',
'posts', # <-- ДОБАВЬТЕ ЭТУ СТРОКУ
]

---

## Шаг 2: Создание моделей (Models)

Модель — это Python-класс, который описывает таблицу в базе данных.

1. Откройте файл `C:\django\posts\[Link]`.


2. Вставьте этот код:

from [Link] import models

class Post([Link]):
title = [Link](max_length=200, verbose_name="Заголовок")
content = [Link](verbose_name="Содержимое")
pub_date = [Link](auto_now_add=True, verbose_name="Дата
публикации")

def __str__(self):
return [Link]

class Meta:
verbose_name = "Пост"
verbose_name_plural = "Посты"
ordering = ['-pub_date'] # Сортировка (новые сверху)

---

## Шаг 3: Миграции базы данных

Вы описали модели, теперь нужно применить их к базе данных.

1. **Создайте файл миграции:**


python [Link] makemigrations posts

2. **Примените миграцию к базе:**


python [Link] migrate

---

## Шаг 4: Админ-панель (Admin)

1. **Создайте супер-пользователя (администратора):**


python [Link] createsuperuser
(Введите логин, email и пароль)

2. **Зарегистрируйте модель в админке.** Откройте `C:\django\posts\[Link]` и


вставьте:

from [Link] import admin


from .models import Post # Импортируем нашу модель

[Link](Post) # Регистрируем ее

3. **Проверьте!** Запустите сервер:


python [Link] runserver

4. Откройте в браузере `[Link]


5. Войдите и **создайте 2-3 тестовых поста**.

---

## Шаг 5: Представления (Views)

View решает, *какие* данные и *как* показать пользователю.

1. Откройте `C:\django\posts\[Link]`.
2. Вставьте этот код (используем Class-Based Views):

from [Link] import ListView, DetailView


from .models import Post
class PostListView(ListView):
model = Post
template_name = 'posts/post_list.html' # Шаблон списка постов
context_object_name = 'posts' # Имя переменной в шаблоне

class PostDetailView(DetailView):
model = Post
template_name = 'posts/post_detail.html' # Шаблон одного поста
context_object_name = 'post' # Имя переменной в шаблоне

---

## Шаг 6: Маршруты (URLs)

URLs — это "диспетчер", который связывает URL-адрес с вашим View.

1. **Главный `[Link]` (Проекта)**


Откройте `C:\django\Blog\[Link]`. Подключите URL-адреса приложения
`posts`.

from [Link] import admin


from [Link] import path, include # <-- Убедитесь, что 'include' есть

urlpatterns = [
path('admin/', [Link]),
path('', include('[Link]')), # <-- ДОБАВЬТЕ ЭТУ СТРОКУ
]

2. **`[Link]` (Приложения)**
**Создайте** новый файл `C:\django\posts\[Link]`.
Вставьте в него код:

from [Link] import path


from .views import PostListView, PostDetailView # Импортируем наши Views

urlpatterns = [
# Главная страница (список постов)
path('', PostListView.as_view(), name='post-list'),

# Страница одного поста (например, /post/1/)


path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
]

---

## Шаг 7: Шаблоны (Templates)

Шаблоны — это HTML-файлы с "дырками" для данных.

1. **Создайте папки** для шаблонов:


* Внутри `C:\django\posts\` создайте папку `templates`.
* Внутри `C:\django\posts\templates\` создайте папку `posts`.

Структура: `C:\django\posts\templates\posts\`
2. **Создайте `post_list.html`:**
Создайте файл `C:\django\posts\templates\posts\post_list.html`

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Мой Блог</title>
<style> body { font-family: sans-serif; max-width: 800px; margin: auto; padding:
20px; } </style>
</head>
<body>
<h1>Добро пожаловать в мой блог!</h1>
<hr>

{% for post in posts %}


<article>
<h2>
<a href="{% url 'post-detail' [Link] %}">{{ [Link] }}</a>
</h2>
<p><i>Опубликовано: {{ post.pub_date }}</i></p>
<p>{{ [Link]|truncatewords:30 }}</p> </article>
<hr>
{% endfor %}

</body>
</html>

3. **Создайте `post_detail.html`:**
Создайте файл `C:\django\posts\templates\posts\post_detail.html`

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ [Link] }}</title>
<style> body { font-family: sans-serif; max-width: 800px; margin: auto; padding:
20px; } </style>
</head>
<body>

<h1>{{ [Link] }}</h1>


<p><i>Опубликовано: {{ post.pub_date }}</i></p>

<hr>

<div>
{{ [Link]|linebreaks }}
</div>

<hr>
<a href="{% url 'post-list' %}"> &larr; Назад ко всем постам</a>

</body>
</html>
---

## Шаг 8: Запуск и Проверка

1. Убедитесь, что вы создали 1-2 поста в админке (`/admin/`).


2. Запустите сервер:
python [Link] runserver

3. Откройте `[Link] Вы должны увидеть список постов.


4. Нажмите на заголовок. Вы должны перейти на страницу поста (например,
`/post/1/`).

---

## (Опционально) Шаг 9: Добавляем Категории

1. **Модель (`posts/[Link]`)**:
Добавьте класс `Category` (ПЕРЕД `Post`) и добавьте поле `category` в `Post`.

...
class Category([Link]):
name = [Link](max_length=100, verbose_name="Название
категории")

def __str__(self):
return [Link]

class Meta:
verbose_name = "Категория"
verbose_name_plural = "Категории"

class Post([Link]):
title = [Link](max_length=200, verbose_name="Заголовок")
content = [Link](verbose_name="Содержимое")
pub_date = [Link](auto_now_add=True, verbose_name="Дата
публикации")

# НОВОЕ ПОЛЕ
category = [Link](
Category,
on_delete=models.SET_NULL, # Если удалить категорию, посты не
удалятся
null=True, # Разрешаем полю быть пустым
blank=True,
verbose_name="Категория"
)
...

2. **Миграции**:
python [Link] makemigrations posts
python [Link] migrate

3. **Админка (`posts/[Link]`)**:
Зарегистрируйте `Category`.

from [Link] import admin


from .models import Post, Category # <-- Добавляем Category

[Link](Post)
[Link](Category) # <-- Регистрируем Category

4. **Шаблоны (`post_detail.html`)**:
Отобразим категорию (вставьте это после даты):

...
<p><i>Опубликовано: {{ post.pub_date }}</i></p>

{% if [Link] %}
<p><strong>Категория: {{ [Link] }}</strong></p>
{% endif %}

<hr>
...

Вам также может понравиться