Доска объявлений на Django с нуля

Электронные доски объявлений – очень популярный тип сайтов, который вполне можно разработать с помощью Django. Сегодня мы поговорим о том, как создавать доску объявления на Django. Панель администратора Django имеет весь необходимый функционал для этого.

Преимущества электронной доски объявлений

Если вы хотите создать площадку, на которой будут размещаться объявления, вам необходимо сначала понимать, какие преимущества она несет конечному пользователю. Ведь это нужно учитывать при разработке его функционала.

Несмотря на то, что мы сегодня создадим простое приложение, в дальнейшем вам придется его дорабатывать исходя из ваших задач. Поэтому необходимо понимать, какие выгоды должен получить конечный потребитель.

  1. Минимизация временных затрат. Пользователю достаточно выполнить несколько действий, и объявление уже на сайте. Следовательно, любая важная функция доски объявлений должна быть доступна пользователю в два клика.
  2. Удобство использования. Обязательно необходимо предусмотреть рубрикацию и деление по разделам. Также необходимо предусмотреть фильтры.
  3. Обеспечить индексацию в поисковых системах. Пользователь должен находить ваше объявление по запросу в Google.

Начальная настройка

Итак, что нам нужно сделать?

  1. Создать директорию для кода на рабочем столе, называющуюся mb.
  2. Установить Django в новом виртуальном окружении.
  3. Создать новый проект, который будет называться mb_project.
  4. Создать приложение posts.
  5. Обновить 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, что делается в два этапа. 

  1. Создается файл миграции, которые создают отсылки к изменениям для моделей баз данных. 
  2. После этого создается работающая база данных с помощью инструкции 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/ и в появившейся странице введите свой логин и пароль.Доска объявлений на Django с нуля

После этого откроется панель администратора.Доска объявлений на Django с нуля

Далее обновляем admin.py, чтобы приложение posts появилось в админке. Для этого введите следующие изменения в posts/admin.py

# posts/admin.py

from django.contrib import admin

 

from .models import Post

 

admin.site.register(Post)

Этот код нужно просто добавить. Перезагрузите страницу.Доска объявлений на Django с нуля

Создаем первую запись, нажав кнопку +Add.Доска объявлений на Django с нуля

Сохраняем с помощью кнопки Save.Доска объявлений на Django с нуля

Внесем этот код в 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 символов, что намного красивее.Доска объявлений на Django с нуля

Представления, шаблоны и 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'),

]

Перезагружаем веб-сервер и посещаем главную страницу.Доска объявлений на Django с нуля

Добавление новых записей

Теперь давайте добавим новые записи.Доска объявлений на Django с нуляДоска объявлений на Django с нуляДоска объявлений на Django с нуля

Проверяем внесенные изменения.Доска объявлений на Django с нуля

Теперь просто загружаем код в 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. 

ОфисГуру
Adblock
detector