Создание веб-приложения с помощью Django
Django - это мощный веб-фреймворк для Python, позволяющий быстро создавать веб-приложения. В этом руководстве мы создадим базовое приложение Django с нуля. Мы рассмотрим:
- Установку Django
- Создание проекта
- Настройку базы данных
- Создание приложения
- Определение моделей
- Создание представлений
- Настройку URL-адресов
- Создание шаблонов с помощью HTML
- Обслуживание статичных файлов
- Работу с формами
- Интерфейс администратора
- Развертывание
К концу курса вы получите простое веб-приложение, работающее с использованием широких возможностей Django. Давайте начнем!
Установка Django
Django можно легко установить с помощью pip
. Сначала убедитесь, что у вас установлен Python 3 и pip
.
Откройте терминал или командную строку и выполните команду:
pip install Django
В результате будет установлена последняя версия Django.
Убедиться в успешной установке Django можно, выполнив команду:
python -m django --version
При этом должна быть выведена версия установленного Django.
Создание проекта
После установки Django мы можем создать наш первый проект.
Перейдите в каталог, где будет храниться ваш код, и выполните команду:
django-admin startproject myproject
В результате будет создана папка myproject
с некоторыми автоматически сгенерированными файлами и папками:
manage.py
: Утилита командной строки, используемая для взаимодействия с проектом.myproject/settings.py
: Настройки и конфигурация проекта Django.myproject/urls.py
: URL-маршруты верхнего уровня для проекта Django.myproject/__init__.py
: Пустой файл, указывающий Python рассматривать папку myproject как пакет Python.
Настройка базы данных
По умолчанию Django использует SQLite, который не требует дополнительной настройки базы данных. SQLite сохраняет базу данных в файле в каталоге проекта.
Если вы хотите использовать другую базу данных, например PostgreSQL или MySQL, установите соответствующие связки баз данных и измените параметр DATABASES
в файле myproject/settings.py
.
Например, для использования PostgreSQL:
pip install psycopg2
Затем в файле settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Создание приложения
Проекты Django состоят из различных приложений, каждое из которых служит определенной цели.
Для создания приложения под названием Pages:
python manage.py startapp pages
В результате в проекте будет создана папка pages
со своими models.py
, views.py
и т.д.
Теперь зарегистрируйте приложение в файле myproject/settings.py
в разделе INSTALLED_APPS
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pages', # new
]
Теперь приложение готово к использованию.
Определение моделей
Модели представляют собой данные для нашего приложения и определяются как классы в файле models.py
приложения.
Для нашего приложения Pages мы можем создать простую модель главной страницы (HomePage):
# pages/models.py
from django.db import models
class HomePage(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
models.Model
делает эту модель Django моделью, которая будет сохранена в базе данных.models.CharField
- для мелкого и крупного текста.models.TextField
- для крупного текстового содержимого.
Мы также создадим файл миграции для создания модели в базе данных:
python manage.py makemigrations
В результате будет сгенерирован файл миграции для создания таблицы домашней страницы.
Затем запустите миграции с помощью:
python manage.py migrate
Модель домашней страницы теперь существует в базе данных!
Создание представлений
Представления - это функции Python, которые обрабатывают запросы и возвращают ответы.
В файле pages/views.py
мы можем создать простое представление для отображения шаблона:
# pages/views.py
from django.shortcuts import render
def home(request):
return render(request, 'home.html', {'title':'My Home Page'})
Это представление home
будет искать шаблон с именем home.html
и отображать его, передавая заголовок в качестве контекста.
Настройка URL-адресов
URL-адреса определяют, какое представление обрабатывает каждый запрос, на основе пути URL-адреса запроса.
В файле myproject/urls.py
добавьте путь для нашего представления home
:
from django.contrib import admin
from django.urls import path
from pages.views import home
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
]
При этом запросы к URL-адресу корня сайта привязываются к представлению home
.
Позже мы можем добавить другие пути для дополнительных представлений.
Создание шаблонов с помощью HTML
Для генерации динамического HTML в Django используется язык шаблонов, называемый Django Template Language (DTL).
Шаблоны помещаются в папку templates
в каждом приложении. Мы можем создать файл templates/home.html
:
<!-- templates/home.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ content }}</p>
</body>
</html>
Шаблонные теги {{ title }}
и {{ content }}
отображают значения, переданные из представления.
Передача статичных файлов
Статические файлы, такие как CSS, JS и изображения, должны находиться в папке static
в каждом приложении.
В файл settings.py
добавьте:
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']
Это указывает Django, где искать статические файлы.
В шаблоне статические файлы загружаются с помощью:
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
Работа с формами
Формы позволяют пользователям отправлять данные в приложение. Давайте создадим простую форму ContactForm
.
В файле pages/forms.py
:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField()
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
При этом создается форма с полями name
, email
и message
.
В файле views.py
:
from .forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Process form here
return redirect('home')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
Здесь происходит отправка формы и проверка данных.
Шаблон contact.html
может отображать форму:
<form method="POST"> {% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
Обязательно добавьте {% csrf_token %}
для защиты от атак.
Интерфейс администратора
Django предоставляет встроенный интерфейс администратора для управления содержимым базы данных.
Сначала создайте суперпользователя:
python manage.py createsuperuser
Введите имя пользователя, e-mail и пароль.
Теперь в файле pages/admin.py
зарегистрируйте модели:
from django.contrib import admin
from .models import HomePage
admin.site.register(HomePage)
Теперь модель появится в интерфейсе администратора.
Запустите dev-сервер и перейдите по адресу /admin
, чтобы войти в систему и управлять своими моделями.
Развертывание
Для развертывания в режиме онлайн настройте settings.py
для использования в производстве и настройте WSGI с помощью веб-сервера, например Nginx и Gunicorn.
Некоторые ключевые параметры производства:
- DEBUG = False
- ALLOWED_HOSTS = [‘www.mydomain.com‘]
- STATIC_ROOT = BASE_DIR / ‘staticfiles’
- SECURE_PROXY_SSL_HEADER
Для ускорения развертывания используйте такие сервисы, как PythonAnywhere, Heroku, AWS Elastic Beanstalk для размещения проектов Django.
Заключение
На этом основы начала работы с Django исчерпаны! Мы создали новый проект, сделали простую модель и представления, отобразили шаблоны, обработали формы, обслужили статические файлы, настроили админку и подготовились к развертыванию.
Django очень мощный, и это лишь малая часть того, что он может сделать. К числу других областей, которые следует изучить подробнее, относятся:
- Пользовательские модели пользователей и аутентификация
- Представления на основе классов для более эффективного повторного использования кода
- Наборы запросов (QuerySets) для доступа к данным и их фильтрации
- Тестирование с помощью модульных тестов
- Django REST Framework для работы с API
- Кэширование и оптимизация производительности
Официальная документация по Django является фантастической и содержит огромное количество информации. Не стесняйтесь развивать этот проект и превращать его в полноценное веб-приложение с дополнительными возможностями!