Взглянем на Django

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

Цель этого документа - дать вам достаточно технических деталей, чтобы понять, как работает Django, но он не предназначен для использования в качестве учебного пособия или справочника - но и это у нас тоже есть! Когда вы будете готовы начать проект, вы можете начать с учебника или погрузиться в более подробную документацию .

Создай свою модель

Хотя вы можете использовать Django без базы данных, он поставляется с объектно-реляционным отображением, в котором вы описываете структуру своей базы данных с помощью кода Python.

Синтаксис моделирования данных дает возможность представлять свои элегантные модели - до сих пор, она решена много лет проблем схемы базы данных. Вот небольшой пример:

мой сайт / новости / models.py
from django.db import models

class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    def __str__(self):
        return self.full_name

class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

Разверните

Затем запустите утилиты командной строки Django для автоматического создания таблиц базы данных:

$ python manage.py makemigrations
$ python manage.py migrate
...\> py manage.py makemigrations
...\> py manage.py migrate

Команда makemigrations проверяет все доступные модели и создает миграции для таблиц базы данных, которые еще не существуют. migrate выполнить эти миграции и создать таблицы в базе данных. Система миграции предоставляет вам другие возможности для управления схемой вашей базы данных.

Воспользуйтесь преимуществами предлагаемого вам API

Следовательно, у вас есть бесплатный доступ к богатому API Python для управления вашими данными. API создается на лету, без необходимости писать код

# Import the models we created from our "news" app
>>> from news.models import Article, Reporter

# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

# Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Reporter matching query does not exist.

# Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>

# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>

# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>

# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()

# Delete an object with delete().
>>> r.delete()

Интерфейс динамического администрирования: это не просто строительные леса, это настоящий дом.

После того, как ваши модели определены, Djando может автоматически создать профессиональный и готовый к работе административный интерфейс , веб-сайт, который позволяет аутентифицированным пользователям добавлять, изменять и удалять объекты. Единственное требование - зарегистрировать вашу модель на сайте администрирования:

мой сайт / новости / models.py
from django.db import models

class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
мой сайт / новости / admin.py
from django.contrib import admin

from . import models

admin.site.register(models.Article)

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

Распространенным шаблоном при создании приложения Django является создание шаблонов и настройка сайтов администрирования как можно быстрее, чтобы ваша команда (или клиенты) могли начать ввод данных. Тогда разработка уровня представления общедоступных данных может продолжаться в собственном темпе.

Дизайн URL

Четкая и элегантная схема URL-адресов - важный аспект качественного веб-приложения. Django поощряет создание красивых URL-адресов и не помещает в них никаких расширений, таких как .php или .asp .

Чтобы разработать URL-адреса для приложения, вы создаете модуль Python с именем URLconf . Это сводка для вашего приложения, она содержит привязки между вашими шаблонами URL и соответствующими функциями Python. Эти конфигурации URL-адресов также используются для отделения URL-адресов от вашего кода Python.

Вот как может выглядеть URLconf для предыдущего Reporter / примера Article :

mysite / news / urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<int:pk>/', views.article_detail),
]

Приведенный выше код связывает URL-адреса с функциями приема Python ("представлениями"). Строки пути используют теги параметров для «захвата» значений из URL. Когда пользователь запрашивает страницу, Django проходит все пути по порядку и останавливается, как только один из этих путей совпадает с запрошенным URL (если ни один из них не совпадает, Django вызывает специальное представление 404 ). Это очень быстро, так как при начальной загрузке пути компилируются в регулярные выражения.

Как только один из шаблонов URL совпадает, Django вызывает связанное представление, которое является функцией Python. Каждое представление получает объект запроса, который содержит метаданные запроса, а также значения, зафиксированные в шаблоне.

Например, если пользователь запрашивает URL-адрес "/ article / 2005/05/39323 /", Django вызовет функцию .news.views.article_detail(request, year=2005, month=5, pk=39323)

Написание просмотров

Каждое представление отвечает за выполнение одного из двух действий: возвращает объект, HttpResponse содержащий содержимое запрошенной страницы, или генерирует исключение, например Http404 . Остальное - твоя работа.

Обычно представление извлекает данные на основе параметров, загружает шаблон и отображает шаблон с извлеченными данными. Вот пример представления для предыдущего примера year_archive  :

mysite / news / views.py
from django.shortcuts import render

from .models import Article

def year_archive(request, year):
    a_list = Article.objects.filter(pub_date__year=year)
    context = {'year': year, 'article_list': a_list}
    return render(request, 'news/year_archive.html', context)

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

Создание ваших шаблонов

Приведенный выше код загружает шаблон news/year_archive.html .

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

Допустим, шаблон news/article_detail.html найден. Вот как это может выглядеть:

мой сайт / новости / шаблоны / новости / year_archive.html
{% extends "base.html" %}

{% block title %}Articles for {{ year }}{% endblock %}

{% block content %}
<h1>Articles for {{ year }}</h1>

{% for article in article_list %}
    <p>{{ article.headline }}</p>
    <p>By {{ article.reporter.full_name }}</p>
    <p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}

Переменные заключены в две фигурные скобки. означает «Показать значение атрибута заголовка статьи». Но точки используются не только для атрибутов. Их также можно использовать для поиска ключей словаря, ключей индекса или для вызова функций.{{ article.headline }}

Обратите внимание, что используются Unix-подобные «каналы» (символ «|» (вертикальная черта)). Это называется шаблонным фильтром, это способ отфильтровать значение переменной. В этом случае фильтр «date» форматирует объект Python типа «datetime» в предоставленном формате (как в функции «date» PHP).{{ article.pub_date|date:"F j, Y" }}

Вы можете связать столько фильтров, сколько захотите. Вы можете написать свои собственные шаблоны фильтров . Вы можете писать собственные теги шаблонов, которые используют код Python в фоновом режиме.

Наконец, Django использует концепцию «наследования шаблонов». Вот что делает . Это означает: «Сначала загрузите шаблон с именем« base », в котором определены некоторые блоки, и заполните эти блоки следующим содержимым. ». Подводя итог, это значительно снижает избыточность в шаблонах: каждый шаблон должен определять только то, что для него характерно.{% extends "base.html" %}

Вот как может выглядеть шаблон base.html, в том числе с использованием статических файлов  :

мой сайт / templates / base.html
{% load static %}
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <img src="{% static "images/sitelogo.png" %}" alt="Logo">
    {% block content %}{% endblock %}
</body>
</html>

В упрощенном виде он определяет общий аспект вашего сайта (с логотипом) и позиции «дыр», которые дочерние шаблоны могут заполнить. Таким образом, изменение стиля сайта похоже на изменение одного файла, основного шаблона.

Он также позволяет создавать несколько версий сайта с разными базовыми шаблонами при повторном использовании дочерних шаблонов. Создатели Django использовали эту технику для создания самых разных «мобильных» версий своих сайтов, просто создав новый базовый шаблон.

Обратите внимание, что вам не обязательно использовать систему шаблонов Django, если вы предпочитаете другую. Хотя система шаблонов Django особенно хорошо интегрирована со слоем модели Django, ничто не заставляет вас использовать ее. Вам также не обязательно использовать API базы данных Django. Можно использовать другой уровень абстракции базы данных, читать файлы XML, файлы на диске или какое-либо другое решение. Каждая часть Django - модели, представления, шаблоны - отделена от других.

Это только основа

Это был всего лишь беглый взгляд на возможности Django. Вот еще несколько полезных:

  • Система кеширования, которая интегрируется с memcached или другими механизмами.
  • Система синдикации, которая позволяет создавать каналы RSS и Atom, написав небольшой класс Python.
  • Другие интересные функции, автоматически созданные для интерфейса администратора, этот предварительный просмотр только поцарапал поверхность.

Следующие шаги для вас - загрузить Django , прочитать руководство и присоединиться к сообществу . Спасибо за ваш интерес !

Copyright ©2020 All rights reserved