Гайд Первый Сайт на Django за 20 Минут!

Статус
В этой теме нельзя размещать новые ответы.
  • 217
  • 100
Доброго времени суток, дорогие друзья!

1610399745786.png


Начнем с того, что нам нужно:

  1. Python последней версии
  2. Django
  3. Руки
  4. Мозги
Сегодня мы напишем сайт при помощи фреймворка Django!

Для начала нам нужно создать папку, в которой мы будем создавать виртуальное окружение. Я его назову superwebsite


superwebsite_env\Scripts\activate

Теперь нам надо установить сам Django.

Для этого открываем cmd и вписываем:

pip install Django

Ну, а теперь самое интересное!
Создаем проект

django-admin.py startproject superwebsite

Отлично! Основа сайта готова. Теперь запустим веб-сервер

python manage.py runserver


Теперь, когда вы вводите localhost:8000, вас поприветствует это окно!

1610391317143.png


Так, а теперь там нужна БД
База Данных, запомни! В школе будешь хвастаться перед друзьями!:D

Пока у нас есть sqlite который находится в папке db.sqlite3

Создаем таблицы для БД

python manage.py migrate

Теперь нам нужно создать новое приложение в нашем проекте, я его назову megabomba

python manage.py startapp [B]megabomba[/B]

После чего, в папке проекта будет:


Код:
superwebsite/superwebsite
|-- superwebsite
|-- megabomba
|-- db.sqlite3
|-- manage.py

Чтобы Django задетектил изменения, нужно зайти в settings.py (папка superwebsite/superwebsite/superwebsite) и найти INSTALLED_APPS
Там просто нужно добавить новый элемент с названием нашего приложения.


Код:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'megabomba',
]

Пришло время попыхтеть.
Сейчас мы будем работать с Model

Добавим Topic и Entry в файл models.py (папка superwebsite/superwebsite/superwebsite)

Открываем models.py и вписываем следующее:


Python:
from django.db import models

class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text

class Entry(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.PROTECT)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'entries'

    def __str__(self):
        return self.text[:50] + "..."

Теперь создаем файл миграции и БД

python manage.py makemigrations megabomba python manage.py migrate

Сейчас нам нужно зайти в админ панель и создать суперюзера

python manage.py createsuperuser

После добавления нового юзеры мы можем увидеть следующее чудо!

1610393737778.png


Для того, чтобы мы могли работать с нашими моделями, мы должны зарегистрировать их.
Для этого мы переходим в файл admin.py (superwebsite/superwebsite/megabomba) и вписываем следующее:

Пришло время делать маршруты для запросов от браузера.

Для этого редактируем два файла urls.py (все та же папка superwebsite/superwebsite/superwebsite) и для приложения megabomba (папка superwebsite/superwebsite/megabomba)


Python:
from django.contrib import admin
from megabomba.models import Topic, Entry

admin.site.register(Topic)
admin.site.register(Entry)

1610399937687.png

Дальше делаем иморты path и include

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


Python:
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('megabomba.urls', namespace='logs')),
]

from django.urls import path, include

Теперь создадим файл urls.py в папке приложения (папка superwebsite/superwebsite/megabomba)

Опять же сделаю полный пример:


Python:
from django.urls import path

from . import views
app_name = 'logs'

urlpatterns = [
    path('', views.index, name='index'),
    path('topics/<int:polls_id>/', views.polls, name='logs'),
]

В методе path() первым параметром идет url страницы на сайте,
Второй параметр – это метод в файле views , который должен обрабатывать пришедший запрос от посетителя сайта,
Третий параметр – это произвольное имя данного маршрута, которое может применяться в дальнейшем для обращения к этому маршруту.


Начинаем работать с представлением для получения информации от модели и отдачи шаблона template, который нужен ему для размещения информации на html-странице

Для того, чтобы найти этот класс представления нам нужно перейти в файл views.py, который находится в папке приложения megabomba (superwebsite/superwebsite/megabomba) Добавим в него метод маршрута:


Python:
from django.shortcuts import render
from .models import Topic

def index(request):
    topics = Topic.objects.order_by('-date_added')
    context = {
        'topics': topics,
    }
    return render(request,
        'logs/index.html', context)

def topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    entries = topic.entry_set.order_by('-date_added')
    context = {
        'topic': topic,
        'entries': entries,
    }
    return render(request,
        'logs/topic.html', context)

Создаем шаблоны в папке приложения megabomba (superwebsite/superwebsite/megabomba) создав папку templates и внутри нее папку с названием приложения ultrapitarda. Затем внутри этой папки создаем 3 файла: base.html, index.html и topic.html.

Приступаем к части с html

В index.html вписываем следующее:


HTML:
{% extends 'ultrapitarda/base.html' %}

{% block content %}

    <h3>Статьи:</h3>

    {% for topic in topics %}
        <p>
            <strong>
                <a href="/topics/{{ topic.id }}/">
                    {{topic.text}}
                </a>
            </strong>
            (Дата создания: {{topic.date_added|date:'H:i d/m/Y'}})
        </p>
    {% empty %}
        <p>Статей нету.</p>
    {% endfor %}

{% endblock content %}

В topic.html вписываем следующее:

HTML:
{% extends 'ultrapitarda/base.html' %}

{% block content %}

    <h3>Тема статьи: {{topic}}</h3>

    {% for entry in entries %}
        <p>
            {{entry.text|linebreaks}}
            (Дата создания: {{entry.date_added|date:'H:i d/m/Y'}})
        </p>
    {% empty %}
        <p>Записей нету.</p>
    {% endfor %}

{% endblock content %}

В base.html вписываем следующее:

HTML:
<p><a href="{% url ultrapitarda:index' %}">
    Все Статьи.
</a></p>
{% block content %}{% endblock content %}

Теперь заходим сюда и радуемся

Чтобы добавить топики и статьи нужно зайти в админку Django

Надеюсь что было понятно. Буду искренне благодарен, если пишите аргументированную критику(Она помогает мне улучшать свой контент)!
Надо собирать камни, которые в вас бросают. Это основание будущего пьедестала.
Остались вопросы ? Пиши в tg
 
Последнее редактирование:
  • 428
  • 71
4.1. Запрещено размещение любых сообщений, не относящихся к контексту темы, сообщение должно нести исключительно информационный характер.
Похй ваще
 
Статус
В этой теме нельзя размещать новые ответы.
Активность
Пока что здесь никого нет
Сверху Снизу