Статьи

10 проблем с Django для начинающих

Django — невероятно мощный веб-фреймворк, но его использование может быть немного сложным для новых пользователей. Более года назад я понял это нелегко, тратя часы на борьбу даже с самыми основными понятиями. Если вы новичок в Django (или фреймворках MVC в целом), вам, вероятно, придется немного изменить свое мышление, чтобы использовать эту надежную фреймворк. Вот некоторые из проблем, с которыми мне пришлось бороться, прежде чем я полностью понял их. Надеюсь, это сэкономит вам часы борьбы.


Джанго не CMS. Он не может делать все, что может сделать WordPress или Drupal прямо из коробки. Тем не менее, вы можете делать бесконечно больше с Django, потому что это не CMS.

Если у вас есть фон, например, с такой платформой, как WordPress, потребуется некоторое время, чтобы осознать тот факт, что вам придется делать гораздо больше вещей вручную, например, создание URL-адресов или изменение настроек. , Большинство конфигураций будут выполняться не в пользовательском интерфейсе, а в файлах Python.

Хотя Django поставляется с довольно изящной административной областью прямо из коробки, настройка Django иногда не так проста, как стандартная CMS.


Одним из самых больших начальных препятствий, с которыми сталкиваются новые пользователи, является настройка их локальной среды для Django. Для многих новичков требуется больше времени для установки фреймворка, чем для создания их первого приложения. Фреймворки PHP, такие как CakePHP , в значительной степени готовы начать использовать их, как только вы загрузите их на свой локальный компьютер.

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


Если вы новичок в Django (или MVC-фреймворках в целом), шансы на то, что термины «проекты» и «приложения» могут быть немного запутанными

С Django, Project — это просто набор приложений. Скажем, вы создавали клон YouTube; Вы должны создать проект «MyTube», который будет содержать такие приложения, как «видео», «комментарии», «оценки», «блог» и т. д.

Приложения похожи на модули в CMS, за исключением того, что вы создаете их с нуля. Они намного меньше по объему, обычно выполняют только одну основную функцию. Для примера MyTube вы не просто создали бы одно приложение, которое позволяло бы пользователям загружать видео, комментировать их, оценивать их и все остальное. Вы хотите, чтобы ваши приложения были небольшими по объему , выполняя только одну или две функции самостоятельно.


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

В традиционной CMS вы можете разделить повторно используемые части шаблона на их собственные файлы (например, файл заголовка) и включить их в каждый из шаблонов. С Django вы создаете шаблон base.html и указываете блоки, которые могут быть перезаписаны в дочерних шаблонах. Это делает ваш код более пригодным для повторного использования.

Так, например, у вас может быть шаблон base.html, который имеет это:

1
2
3
4
5
6
<div>
  {% block content %}
    <p>Here is our content that will be overwritten</p>
  {% endblock %}
  <p>Other stuff that won’t be overwritten.</p>
</div>

Затем в другом шаблоне вы можете перезаписать блок {% content%}. Вместо того, чтобы включать файл боковой панели в дизайн, мы просто делаем что-то вроде этого:

1
2
3
4
5
{% extends base.html %}
 
{% block content %}
I’d like a different content block!
{% endblock %}

Это расширяет base.html. Этот метод позволяет вам лучше контролировать свои шаблоны и гарантирует, что вы не создаете дублирующийся код.

Чтобы узнать больше о возможностях наследования шаблонов, ознакомьтесь с этой статьей о возможностях наследования шаблонов Django .


Поскольку Django не обслуживает медиа-файлы сам по себе, ему нравится разделять медиа-файлы (изображения, скрипты Java, таблицы стилей и т. Д.) В каталог вне приложений. Это позволяет вам решить, как вы собираетесь обслуживать эти статические файлы. Для обслуживания файлов вы можете использовать отдельный веб-сервер или облачные сервисы, такие как Amazon S3 .

Ваши файлы проекта могут выглядеть примерно так:

1
2
3
4
5
6
7
8
MyProject
  — app
  — app2
  — media
    — javascript
    — stylesheets
    — images
  ….

Миграция базы данных является проблемой для многих новичков. Это происходит, когда у вас уже есть поля в вашей базе данных (производство или разработка), и вы добавляете что-то, что изменяет базу данных.

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

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


Django поставляется с sqlite , простой базой данных с плоскими файлами, которая не требует настройки. Это позволяет быстро и легко создавать прототипы прямо из коробки.

Однако, как только вы переместили свой проект в производственную среду, скорее всего, вам придется использовать более надежную базу данных, такую ​​как Postgresql или MySQL. Это означает, что у вас будет две отдельные среды: производство и разработка.

Django не имеет встроенной логики, которая позволяет вам легко переключаться между двумя разными настройками, не редактируя файл settings.py вручную. Например, имея настройку

1
DEBUG = True

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

1
DEBUG = False

,

Существует способ автоматического переключения между двумя средами с помощью этой быстрой модификации :

1
2
3
4
5
6
import socket
 
if socket.gethostname() == ‘<a href=»http://productionserver.com» target=»_blank»>productionserver.com</a>’:
    DEBUG = False
else:
    DEBUG = True

Вы также можете использовать бит сокета в различных областях вашего settings.py.


Шаблонные теги — безумно полезный аспект Django. На самом деле, он поставляется со множеством встроенных шаблонов тегов прямо из коробки.

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


Django поставляется с отличной системой аутентификации пользователей в администраторе проекта, которую вы можете использовать для управления пользователями. Тем не менее, система аутентификации пользователей не предоставляет простой способ позволить не-администраторам создавать учетные записи пользователей. CMS, как и Drupal, прекрасно справляются с этим прямо из коробки.

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


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

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

Помимо создания правильного шаблона, вам нужно изменить файл urls.py, указав на него:

1
2
3
urlpatterns = patterns(»,
  (r’^$’, ‘django.views.generic.simple.<WBR>direct_to_template’, {‘template’: ‘homepage.html’}),
…..

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


После того, как вы проработаете все сложные области, которые привлекают большинство новичков, Django окажется действительно быстрым и мощным инструментом для создания веб-приложений. Не расстраивайтесь, если вы рано смущаетесь. Вы всегда можете найти помощь в IRC канале Django ; Stackoverflow — еще одно отличное место, чтобы задавать вопросы.