Электронные доски объявлений – очень популярный тип сайтов, который вполне можно разработать с помощью Django. Сегодня мы поговорим о том, как создавать доску объявления на Django. Панель администратора Django имеет весь необходимый функционал для этого.
Преимущества электронной доски объявлений
Если вы хотите создать площадку, на которой будут размещаться объявления, вам необходимо сначала понимать, какие преимущества она несет конечному пользователю. Ведь это нужно учитывать при разработке его функционала.
Несмотря на то, что мы сегодня создадим простое приложение, в дальнейшем вам придется его дорабатывать исходя из ваших задач. Поэтому необходимо понимать, какие выгоды должен получить конечный потребитель.
- Минимизация временных затрат. Пользователю достаточно выполнить несколько действий, и объявление уже на сайте. Следовательно, любая важная функция доски объявлений должна быть доступна пользователю в два клика.
- Удобство использования. Обязательно необходимо предусмотреть рубрикацию и деление по разделам. Также необходимо предусмотреть фильтры.
- Обеспечить индексацию в поисковых системах. Пользователь должен находить ваше объявление по запросу в Google.
Начальная настройка
Итак, что нам нужно сделать?
- Создать директорию для кода на рабочем столе, называющуюся mb.
- Установить Django в новом виртуальном окружении.
- Создать новый проект, который будет называться mb_project.
- Создать приложение posts.
- Обновить settings.py.
Итак, давайте введем такие команды в терминале либо командной строке.
$ cd ~/Desktop $ mkdir mb && cd mb $ pipenv install django==3.0.* $ pipenv shell (mb) $ django-admin startproject mb_project . (mb) $ python manage.py startapp posts
Далее уведомляем Django о posts.
# mb_project/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'posts.apps.PostsConfig', # новое ]
И создаем базу данных.
(mb) $ python manage.py migrate
Вводим следующие команды.
(mb) $ ls Pipfile db.sqlite3 mb_project Pipfile.lock manage.py posts
Теперь у нас есть файл, представляющий SQLite базу данных.
Далее проверяем, правильно ли мы все сделали.
(mb) $ python manage.py runserver
Появление такого изображения говорит о том, что все сделано правильно.
Модель базы данных – как создать?
Все начинается с создания базы данных. ORM Django позволяет эту модель автоматически переводить в таблицу. В нашем случае достаточно одной лишь модели.
Откройте posts/models.py и обратите внимание на код по умолчанию.
from django.db import models
Django выполнил импорт модуля models, помогающего сформировать нужные характеристики. Теперь создаем модель для хранения текстового содержимого.
# posts/models.py from django.db import models class Post(models.Model): text = models.TextField()
Как активировать модели Django?
Далее надо активировать модель. В любом случае, надо обновить Django, что делается в два этапа.
- Создается файл миграции, которые создают отсылки к изменениям для моделей баз данных.
- После этого создается работающая база данных с помощью инструкции migrate.
Нажмите комбинацию клавиш CTRL+C и выполните такие инструкции.
(mb) $ python manage.py makemigrations posts (mb) $ python manage.py migrate
Необходимо учитывать, что вовсе нет необходимости добавлять название модели после makemigrations. Если просто ввести команду python manage.py makemigrations, будет создан файл для всех доступных изменений. Наш проект маленький, то это особо не играет роли.
Тем не менее, он не должен быть большим. В идеале, он настолько маленький и ясный, насколько это вообще возможно. Тогда значительно проще вернуться к предыдущим версиям кода.
Поэтому рекомендуется всегда добавлять название приложения в конец строки в ходе выполнения команды makemigrations.
Панель администратора Django – принцип работы
Плюс Django в том, что в нем есть очень качественный интерфейс администратора. Он дает весь необходимый набор инструментов для того, чтобы работать с данными.
Чтобы ее использовать, необходимо сначала создать аккаунт супер-пользователя с логином и паролем для входа в админку. Для этого введите команду python manage.py createsuperuser и введите имя пользователя, электронную почту и пароль.
(mb) $ python manage.py createsuperuser Username (leave blank to use 'wsv'): wsv Email: Password: Password (again): Superuser created successfully.
Далее введите следующую команду.
python manage.py runserver
Далее перейдите по адресу http://127.0.0.1:8000/admin/ и в появившейся странице введите свой логин и пароль.
После этого откроется панель администратора.
Далее обновляем admin.py, чтобы приложение posts появилось в админке. Для этого введите следующие изменения в posts/admin.py:
# posts/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
Этот код нужно просто добавить. Перезагрузите страницу.
Создаем первую запись, нажав кнопку +Add.
Сохраняем с помощью кнопки Save.
Внесем этот код в posts/models.py.
# posts/models.py from django.db import models class Post(models.Model): text = models.TextField() def __str__(self): return self.text[:50]
Теперь в поле text будет показываться первые 50 символов, что намного красивее.
Представления, шаблоны и URL
Составляем список содержимого модели базы данных. Для этого добавляем в posts/views.py:
from django.views.generic import ListView from .models import Post class HomePageView(ListView): model = Post template_name = 'home.html'
Далее создаем папку templates и в ней файл home.html.
(mb) $ mkdir templates (mb) $ touch templates/home.html
Обновляем DIRS в settings.py.
(mb) $ mkdir templates (mb) $ touch templates/home.html
Потом вводим этот код.
<!-- templates/home.html --> <h1>Message board homepage</h1> <ul> {% for post in object_list %} <li>{{ post.text }}</li> {% endfor %} </ul>
И добавляем следующий код.
# posts/views.py from django.views.generic import ListView from .models import Post class HomePageView(ListView): model = Post template_name = 'home.html' context_object_name = 'all_posts_list' # новое изменение
Сделаем, чтобы шаблон ссылался на all_posts_list.
<!-- templates/home.html --> <h1>Message board homepage</h1> <ul> {% for post in all_posts_list %} <li>{{ post.text }}</li> {% endfor %} </ul>
Настраиваем URLConfs.
# mb_project/urls.py from django.contrib import admin from django.urls import path, include # новое добавление urlpatterns = [ path('admin/', admin.site.urls), path('', include('posts.urls')), # новое добавление ]
Создаем и обновляем файл настройки URL-маршрутов url.py.
(mb) $ touch posts/urls.py # posts/urls.py from django.urls import path from .views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home'), ]
Перезагружаем веб-сервер и посещаем главную страницу.
Добавление новых записей
Теперь давайте добавим новые записи.
Проверяем внесенные изменения.
Теперь просто загружаем код в github.
(mb) $ git init (mb) $ git add -A (mb) $ git commit -m 'initial commit'
Тестирование
Давайте теперь попробуем добавить пробную запись и проверить правильность ее сохранения.
# posts/tests.py from django.test import TestCase from .models import Post class PostModelTest(TestCase): def setUp(self): Post.objects.create(text='just a test') def test_text_content(self): post = Post.objects.get(id=1) expected_object_name = f'{post.text}' self.assertEqual(expected_object_name, 'just a test')
Теперь давайте запустим первый тест test_text_content. Для этого введите python manage.py test.
А теперь давайте протестируем домашнюю страницу. Это делается с помощью этого кода.
# posts/tests.py from django.test import TestCase from django.urls import reverse # новое from .models import Post class PostModelTest(TestCase): ... class HomePageViewTest(TestCase): # новое def setUp(self): Post.objects.create(text='this is another test') def test_view_url_exists_at_proper_location(self): resp = self.client.get('/') self.assertEqual(resp.status_code, 200) def test_view_url_by_name(self): resp = self.client.get(reverse('home')) self.assertEqual(resp.status_code, 200) def test_view_uses_correct_template(self): resp = self.client.get(reverse('home')) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, 'home.html')
Не забываем загрузить изменения на Git.
(mb) $ git add -A (mb) $ git commit -m 'added tests'
Как сохранить код проекта на GitHub
Все, что нам теперь остается сделать – это сохранить код нашего приложения на GitHub. Для начала надо создать новое хранилище. Пусть оно будет называться mb-app. Обязательно нажмите кнопку «Private».
Далее пролистайте до строки «…or push an existing repository from the command line». Далее скопируйте эти команды и вставьте их в терминал.
(mb) $ git remote add origin https://github.com/wsvincent/mb-app.git (mb) $ git push -u origin master
Естественно, нужно указывать ваше имя пользователя.
Выводы
Как видим, создать доску объявлений не так сложно. Конечно, эта статья подразумевает, что вы уже имеете какой-то опыт разработки Python. Если содержимое материала вам непонятно, то обязательно почитайте о базовых аспектах работы с Django.