В этой статье вы прочитаете о создание блога на python Django, но стоит предупредить, что мы сделаем только основное, дальше вы сами доработаете его, тем более там дальше всё очень просто, ещё сможете скачать код программы и модернизировать его.
Стоит сказать, для того чтобы понять всё статью вы уже должны не много уметь работать с Django, знать что такое модели, разберется в стандартном шаблонизаторе и т.д..
Также перед прочтением этой статьи, прочитаете статью:
«Быстрый старт Django».
Создание основы:
Сначала нужно нужно сделать виртуальное окружение, для этого посмотрите статью «Создание Virtual Environments Python», после делаете проект на Django, но нужно его скачать.
1 | pip install django |
После того как скачали, создаёте проект, тут завесит от операционной системы которую вы используете.
Linux/MacOS:
1 | django-admin startproject blog |
Windows:
1 | django-admin.exe startproject blog |
После того как создали проект, нужно сделать приложение, для этого входим в папку проекта, где находится файл «manage.py» и вводим команду.
1 | python3 manage.py startapp main |
Теперь приложение добавляем в список INSTALLED_APPS
который находится в файле «settings.py».
1 2 3 4 | INSTALLED_APPS = [ ... 'main', ] |
На этом создание основных компонентов закончилось.
Создание самого блога:
Теперь перейдём к созданию всего остального, в папке main, вам нудно настроить три файла, «models.py», «admin.py» и «views.py».
models.py:
Для тех кто не знает, этот файл нужен для настройки баз данных, вот как мы их сделали.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | from django.contrib.auth.models import User from django.db import models class Category(models.Model): id = models.AutoField(unique=True, primary_key=True) name = models.CharField(max_length=50) def __str__(self): return self.name class Post(models.Model): id = models.AutoField(unique=True, primary_key=True) author = models.ManyToManyField(User) title = models.CharField(max_length=50) text = models.TextField() data = models.DateTimeField(auto_now=True) category = models.ForeignKey(Category, on_delete = models.CASCADE) def __str__(self): return self.title |
В начале файла мы делаем импорт нужных компонентов, это модель пользователей и класс для работы с моделями,
Потом идёт создание двух классов, первый, это Category модель для категорий, вторая, это Post, это модель для постов.
В категории у нас два столбца, id
и name, второе название, ну и метод, который указывает как отображать в админ панели, в нашем случае показывается название.
В модели постов, есть точно так же id
и метод __str__
, в котором указываем как показывать данные модели в админ панели, также есть столбцы author — автор поста, title — заголовок поста, text — текст поста, data — дата поста, category — то какой категории привязан пост.
Тут стоит отметить data, так как там в качестве параметра используется auto_now=True
, что значит автоматически ставить время при создание.
После того как вы сделали модель, нужно создать миграции и мигрировать их, для этого вводим две команды.
1 | python3 manage.py makemigrations |
Это команда создаёт миграции.
1 | python3 manage.py migrate |
Эта команда создаёт из миграций таблицы в базе данных, теперь переходим в файл admin.py, туда нужно вписать отображение таблиц в админ панели, вот код.
1 2 3 4 5 | from django.contrib import admin from .models import Post, Category admin.site.register(Post) admin.site.register(Category) |
То есть мы подключаем модели и назначаем их в качестве параметра в методе admin.site.register()
.
После всего сделанного, нужно создать админа, для это вписываем специальную команду.
1 | python manage.py createsuperuser |
Вам надо будет после этой команды ввести email, имя и пароль два раза, теперь вы можете зайти в админ панель и создать первый пост, но в этом нет смысла, так как, мы ещё не сделали страницы для отображения постов.
Templates:
Первым делом сделаем шаблонны, для этого создадим в «main» папку «templates», внутри будет хранить ещё одну папку со страницами и базовый шаблон, с названием «base.html», вот как он выгладит.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>{% block title %}{% endblock %}</title> </head> <body> <main> {% block content %}{% endblock %} </main> </body> </html> |
Тут особо не чего рассказывать, но в блоке {% block title %}
, будет назначаться заголовок страннице, а в {% block content %}
, хранится весь контент страницы.
Дальше делаем папку страниц, назовём её «pages» и там будем хранить два файла, первый отвечает за главную страницу, где выводим все посты назовём её «index.html» и файл самого поста, будет называться «post.html».
index.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | {% extends 'base.html' %} {% block title %}Home{% endblock %} {% block content %} <div class="articles"> {% for post in posts %} <article> <h3><a href="http://127.00.00.1:8000/post/{{post.id}}">{{post.title}}</a></h3> </article> <hr> {% endfor %} </div> {% endblock %} |
В начале файла вписываем наследуемый файл, потом делаем заголовок страницы «Home», для показа всех статьей используем в шаблоне цикл, который проходится по списку posts
.
post.html:
1 2 3 4 5 6 7 8 | {% extends 'base.html' %} {% block title %}{{post.title}}{% endblock %} {% block content %} <h1>{{post.title}}</h1> {{post.text}} {% endblock %} |
Здесь точно также наследуем из базового шаблона, в качестве заголовка страницы используем заголовок поста, в контенте также назначаем заголовок и выводим текст поста.
На этом с шаблонами мы разобрались.
views.py:
Последние что осталось разобрать, это сам вывод статей, для этого в файле «views.py», пишем этот код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from django.shortcuts import render from .models import Post def index_page(request): context = { 'posts': Post.objects.all() } return render(request, "pages/index.html", context) def post_page(request, post_id): context = { 'post': Post.objects.get(id=post_id) } return render(request, "pages/post.html", context) |
Тут в начале подключаем для рендера страницы одну из Django функций и модель «Post», дальше пишем два метода, тут стоит заметить, что обязательно должен быть параметр «request», во всех методах.
Первый, это для вывода главной странницы, там мы берём все посты которые есть на сайте, второе, это для вывода поста, берём его по ID, который передаём в URL.
Теперь подключим все страницы в URL, для этого заходим в главную папку, где ещё находится файл «settings.py», открываем «urls.py», и вот что в нём делаем.
1 2 3 4 5 6 7 8 9 | from django.contrib import admin from django.urls import path from main import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.index_page), path('post/<int:post_id>', views.post_page), ] |
Тут подключаем «views.py», в списке urlpatterns
добавляйте функции которые отображают страницу, для главной url без пути, а посты используем «post/<int:post_id>», где в качестве <int:post_id>
, передаются номер поста.
Запуск блога:
Когда уже всё закончили, запускаем блог.
1 | python3 manage.py runserver |
В терминале должно появится ссылка куда переходить, для того чтобы попасть на сайт.
Для создания поста, вы должны перейти в админ панель, для этого откройте страницу по по пути /admin/, там входите в аккаунт, который создали выше и вот что у вас появится.
Дальше заходим в таблицу «Post», и там нажимаем на кнопку «ADD POST».
Там выбираете кто написал, если пользователей несколько, заголовок, текст и категорию, после нажимаете «SAVE».
Заходим на главную страницу и видим там первый пост.
На этом мы закончили создание блога на Django.
Вывод:
В этой статье вы прочитали как происходит создание первого блога на Django, но тут была только основы, также код программы вы сможете скачать, что бы взять и доработать.