• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

Сделайте свой вклад в развитие Django

Введение

Заинтересованы в небольшой обратной помощи сообществу? Может быть Вы нашли ошибку в Django, которую хотели бы видеть исправленной, либо имеете небольшое новшество, которое хотели бы добавить.

Contributing back to Django itself is the best way to see your own concerns addressed. This may seem daunting at first, but it’s a well-traveled path with documentation, tooling, and a community to support you. We’ll walk you through the entire process, so you can learn by example.

Для кого это учебник?

См.также

Если вам нужна справка по деталям внесения кода, см. документацию Написание кода.

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

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

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

Где получить помощь:

Если у вас возникли проблемы с изучением этого руководства, опубликуйте сообщение на Форуме Django или зайдите на _ сервер Django Discord, чтобы пообщаться с другими пользователями Django, которые могут помочь.

Какие вопросы охватывает данный учебник?

Мы впервые покажем вам, как внести свой вклад в Django. К концу этого руководства вы должны иметь базовое представление как об инструментах, так и о задействованных процессах. В частности, мы рассмотрим следующее:

  • Установка Git.

  • Downloading a copy of Django’s development version.

  • Запуск коллекции тестов Django.

  • Написание теста для ваших изменений.

  • Написание кода для ваших изменений.

  • Тестирование ваших изменений.

  • Отправка запроса на вытягивание.

  • Где искать дополнительные сведения.

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

Требуется Python 3!

Текущая версия Django не поддерживает Python 2.7. Загрузите Python 3 на странице загрузки Python или с помощью менеджера пакетов вашей операционной системы.

Для пользователей Windows

Дополнительную информацию см. в разделе Установка Python в документации Windows.

Нормы поведения

Как участник, вы можете помочь нам сохранить сообщество Django открытым и инклюзивным. Пожалуйста, прочитайте и соблюдайте наш «Кодекс поведения <https://www.djangoproject.com/conduct/>»_.

Установка Git

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

Чтобы проверить, доступен ли git или Вы ещё не устанавливали его, введите git в командной строке. Если Вы получите сообщение о том, что эта команда не может быть найдена, Вам придется скачать и установить его, см. страницу скачивания Git.

Если Вы не знакомы с git, то всегда можете узнать подробнее о командах (после его установки) путем ввода git help в командной строке.

Получение копии разрабатываемой версии Django

The first step to contributing to Django is to get a copy of the source code. First, fork Django on GitHub. Then, from the command line, use the cd command to navigate to the directory where you’ll want your local copy of Django to live.

Загрузите репозиторий исходного кода Django, используя следующую команду:

$ git clone https://github.com/YourGitHubName/django.git
...\> git clone https://github.com/YourGitHubName/django.git

Соединение с низкой пропускной способностью?

Вы можете добавить аргумент --глубина 1 в git clone, чтобы пропустить загрузку всей истории коммитов Django, что сокращает передачу данных с ~250 МБ до ~70 МБ.

Теперь, когда у вас есть локальная копия Django, вы можете установить ее так же, как если бы вы устанавливали любой пакет, используя pip. Самый удобный способ сделать это — использовать виртуальную среду, которая представляет собой функцию, встроенную в Python, которая позволяет вам хранить отдельный каталог установленных пакетов для каждого из ваших проектов, чтобы они не мешали друг другу.

Хорошая идея — хранить все ваши виртуальные среды в одном месте, например, в .virtualenvs/ в вашем домашнем каталоге.

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

$ python3 -m venv ~/.virtualenvs/djangodev
...\> py -m venv %HOMEPATH%\.virtualenvs\djangodev

Путь — это место, где новая среда будет сохранена на вашем компьютере.

Последним шагом в настройке виртуальной среды является ее активация:

$ source ~/.virtualenvs/djangodev/bin/activate

Если команда source недоступна, вы можете попробовать использовать вместо нее точку:

$ . ~/.virtualenvs/djangodev/bin/activate

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

Для пользователей Windows

Чтобы активировать виртуальную среду в Windows, запустите:

...\> %HOMEPATH%\.virtualenvs\djangodev\Scripts\activate.bat

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

Установите ранее клонированную копию Django:

$ python -m pip install -e /path/to/your/local/clone/django/
...\> py -m pip install -e \path\to\your\local\clone\django\

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

Создание проектов с помощью локальной копии Django

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

Вы можете воспользоваться tutorial для получения помощи в создании проекта Django.

Запуск коллекции тестов Django впервые

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

Перед запуском набора тестов войдите в каталог Django tests/ с помощью команды cdtests и установите зависимости тестов, выполнив:

$ python -m pip install -r requirements/py3.txt
...\> py -m pip install -r requirements\py3.txt

Если во время установки вы столкнулись с ошибкой, возможно, в вашей системе отсутствует зависимость для одного или нескольких пакетов Python. Обратитесь к документации неисправного пакета или выполните поиск в Интернете по сообщению об ошибке, с которым вы столкнулись.

Теперь мы готовы запустить набор тестов:

$ ./runtests.py
...\> runtests.py 

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

While Django’s test suite is running, you’ll see a stream of characters representing the status of each test as it completes. E indicates that an error was raised during a test, and F indicates that a test’s assertions failed. Both of these are considered to be test failures. Meanwhile, x and s indicated expected failures and skipped tests, respectively. Dots indicate passing tests.

Skipped tests are typically due to missing external libraries required to run the test; see Выполнение всех тестов for a list of dependencies and be sure to install any for tests related to the changes you are making (we won’t need any for this tutorial). Some tests are specific to a particular database backend and will be skipped if not testing with that backend. SQLite is the database backend for the default settings. To run the tests using a different backend, see Использование другого модуля settings.

Once the tests complete, you should be greeted with a message informing you whether the test suite passed or failed. Since you haven’t yet made any changes to Django’s code, the entire test suite should pass. If you get failures or errors make sure you’ve followed all of the previous steps properly. See Выполнение модульных тестов for more information.

Обратите внимание, что последняя «основная» ветка Django не всегда может быть стабильной. При разработке на основе «основного» вы можете проверить `сборки непрерывной интеграции Django`__, чтобы определить, являются ли сбои специфичными для вашей машины или они также присутствуют в официальных сборках Django. Если вы щелкните, чтобы просмотреть конкретную сборку, вы сможете просмотреть «Матрицу конфигурации», в которой показаны сбои с разбивкой по версии Python и серверной части базы данных.

Примечание

Для этого руководства и заявки, над которой мы работаем, тестирования на SQLite достаточно, однако можно (а иногда и необходимо) запускать тесты, используя другую базу данных. При внесении изменений в пользовательский интерфейс вам необходимо запустить тесты Selenium.

Работаем над функцией

В этом руководстве мы будем работать с «поддельным билетом» в качестве примера. Вот воображаемые детали:

Билет № 99999 — Разрешить произнесение тостов.

Django должен предоставить функцию django.shortcuts.make_toast(), которая возвращает тост.

Теперь мы реализуем эту функцию и связанные с ней тесты.

Создание филиала

Прежде чем вносить какие-либо изменения, создайте новую ветку для заявки:

$ git checkout -b ticket_99999
...\> git checkout -b ticket_99999

Вы можете выбрать любое имя для ветки, например «ticket_99999». Все изменения, внесенные в эту ветку, будут относиться только к билету и не повлияют на основную копию кода, которую мы клонировали ранее.

Написание тестов для Вашего тикета

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

Хороший способ сделать это — сначала написать новые тесты, прежде чем вносить какие-либо изменения в код. Этот стиль разработки называется «разработка через тестирование»__ и может применяться как ко всем проектам, так и к отдельным изменениям. После написания тестов вы запускаете их, чтобы убедиться, что они действительно терпят неудачу (поскольку вы еще не исправили эту ошибку или не добавили эту функцию). Если ваши новые тесты не дают сбоев, вам нужно будет их исправить, чтобы они работали. В конце концов, регрессионный тест, который проходит независимо от наличия ошибки, не очень полезен для предотвращения повторного появления этой ошибки в будущем.

Теперь за наш практический пример.

Writing a test for ticket #99999

Чтобы обработать эту заявку, мы добавим функцию make_toast() в модуль django.shortcuts. Сначала мы собираемся написать тест, который попытается использовать функцию и проверить правильность ее вывода.

Navigate to Django’s tests/shortcuts/ folder and create a new file test_make_toast.py. Add the following code:

from django.shortcuts import make_toast
from django.test import SimpleTestCase


class MakeToastTests(SimpleTestCase):
    def test_make_toast(self):
        self.assertEqual(make_toast(), "toast")

Этот тест проверяет, что make_toast() возвращает toast.

Но вся эта суть тестирования выглядит сложновато…

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

  • Хороший первый взгляд на написание тестов для Django можно найти в документации на Создание и запуск тестов.

  • Погружение в Python (бесплатная онлайн-книга для начинающих Python-разработчиков) включает в себя великолепное `Введение в модульное тестирование`__.

  • After reading those, if you want something a little meatier to sink your teeth into, there’s always the Python unittest documentation.

Запуск Вашего нового теста

Since we haven’t made any modifications to django.shortcuts yet, our test should fail. Let’s run all the tests in the shortcuts folder to make sure that’s really what happens. cd to the Django tests/ directory and run:

$ ./runtests.py shortcuts
...\> runtests.py shortcuts

Если тесты прошли правильно, вы должны увидеть один сбой, соответствующий добавленному нами методу тестирования, со следующей ошибкой:

ImportError: cannot import name 'make_toast' from 'django.shortcuts'

If all of the tests passed, then you’ll want to make sure that you added the new test shown above to the appropriate folder and file name.

Написание кода для Вашего тикета

Далее мы добавим функцию make_toast().

Перейдите в папку django/ и откройте файл Shortcuts.py. Внизу добавьте:

def make_toast():
    return "toast"

Now we need to make sure that the test we wrote earlier passes, so we can see whether the code we added is working correctly. Again, navigate to the Django tests/ directory and run:

$ ./runtests.py shortcuts
...\> runtests.py shortcuts

Everything should pass. If it doesn’t, make sure you correctly added the function to the correct file.

Запуск коллекции тестов Django во второй раз

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

Чтобы запустить весь набор тестов Джанго, скомандуйте cd в Django-директорию tests/ и запустите:

$ ./runtests.py
...\> runtests.py 

Написание документации

Это новая функция, поэтому ее следует задокументировать. Откройте файл docs/topics/http/shortcuts.txt и добавьте в конец файла следующее:

``make_toast()``
================

.. function:: make_toast()

.. versionadded:: 2.2

Returns ``'toast'``.

Поскольку эта новая функция появится в следующем выпуске, она также будет добавлена ​​в примечания к выпуску следующей версии Django. Откройте примечания к выпуску последней версии в docs/releases/, на момент написания это 2.2.txt. Добавьте примечание под заголовком «Незначительные функции»:

:mod:`django.shortcuts`
~~~~~~~~~~~~~~~~~~~~~~~

* The new :func:`django.shortcuts.make_toast` function returns ``'toast'``.

Для более подробной информации о написании документации, в том числе объяснению того, что такое versionadded, см. Написание документации. Эта страница также включает объяснение о том, как построить копию документации локально так, чтобы Вы могли просматривать сгенерированный HTML-код.

Previewing your changes

Теперь пришло время рассмотреть изменения, внесенные в ветку. Чтобы подготовить все изменения к фиксации, запустите:

$ git add --all
...\> git add --all

Then display the differences between your current copy of Django (with your changes) and the revision that you initially checked out earlier in the tutorial with:

$ git diff --cached
...\> git diff --cached

Используйте клавиши со стрелками для перемещения вверх и вниз.

diff --git a/django/shortcuts.py b/django/shortcuts.py
index 7ab1df0e9d..8dde9e28d9 100644
--- a/django/shortcuts.py
+++ b/django/shortcuts.py
@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):

     # Finally, fall back and assume it's a URL
     return to
+
+
+def make_toast():
+    return 'toast'
diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt
index 7d85d30c4a..81518187b3 100644
--- a/docs/releases/2.2.txt
+++ b/docs/releases/2.2.txt
@@ -40,6 +40,11 @@ database constraints. Constraints are added to models using the
 Minor features
 --------------

+:mod:`django.shortcuts`
+~~~~~~~~~~~~~~~~~~~~~~~
+
+* The new :func:`django.shortcuts.make_toast` function returns ``'toast'``.
+
 :mod:`django.contrib.admin`
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~

diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt
index 7b3a3a2c00..711bf6bb6d 100644
--- a/docs/topics/http/shortcuts.txt
+++ b/docs/topics/http/shortcuts.txt
@@ -271,3 +271,12 @@ This example is equivalent to::
         my_objects = list(MyModel.objects.filter(published=True))
         if not my_objects:
             raise Http404("No MyModel matches the given query.")
+
+``make_toast()``
+================
+
+.. function:: make_toast()
+
+.. versionadded:: 2.2
+
+Returns ``'toast'``.
diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py
new file mode 100644
index 0000000000..6f4c627b6e
--- /dev/null
+++ b/tests/shortcuts/test_make_toast.py
@@ -0,0 +1,7 @@
+from django.shortcuts import make_toast
+from django.test import SimpleTestCase
+
+
+class MakeToastTests(SimpleTestCase):
+    def test_make_toast(self):
+        self.assertEqual(make_toast(), 'toast')

Когда вы закончите просмотр изменений, нажмите клавишу «q», чтобы вернуться в командную строку. Если с дифференциалом все в порядке, пришло время зафиксировать изменения.

Фиксация изменений

Чтобы зафиксировать изменения:

$ git commit
...\> git commit

Откроется текстовый редактор для ввода сообщения фиксации. Следуйте рекомендациям по сообщениям о фиксации и напишите сообщение типа:

Fixed #99999 -- Added a shortcut function to make toast.

Нажатие коммита и выполнение запроса на извлечение

После фиксации изменений отправьте его на свой форк на GitHub (замените «ticket_99999» на имя вашей ветки, если оно отличается):

$ git push origin ticket_99999
...\> git push origin ticket_99999

Вы можете создать запрос на включение, посетив страницу Django GitHub. Вы увидите свою ветку в разделе «Недавно добавленные ветки». Нажмите «Сравнить и запросить извлечение» рядом с ним.

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

Следующие шаги

Поздравляем, вы узнали, как сделать запрос на включение в Django! Подробности о более продвинутых методах, которые могут вам понадобиться, находятся в Работа с Git и GitHub.

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

Дополнительная информация для новых участников

Прежде чем вы начнете вносить вклад в Django, есть еще немного информации о вкладе, на которую вам, вероятно, следует взглянуть:

  • Вам следует обязательно прочитать документацию Django по заявке билетов и отправке запросов на включение. В нем описаны этикет Trac, способы получения билетов для себя, ожидаемый стиль кодирования (как для кода, так и для документации) и многие другие важные детали.

  • Новые участники также должны прочитать Django-документацию для новых вкладчиков. Оно имеет множество хороших советов от тех из нас, кто уже помогал Django.

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

Поиск Вашего первого реального тикета

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

Если вы просто хотите уже начать (и никто вас не будет винить!), попробуйте взглянуть на список «простых билетов без ветвей»__ и «простых билетов с ответвлениями, требующими улучшения»__. Если вы знакомы с написанием тестов, вы также можете просмотреть список «простых билетов, для которых нужны тесты»__. Не забудьте следовать рекомендациям по запросу билетов, которые были упомянуты в ссылке на документацию Django по заявке билетов и отправке ветвей.

Что дальше после создания запроса на включение?

После того, как билет имеет ответвление, его необходимо просмотреть второй парой глаз. После отправки запроса на включение обновите метаданные заявки, установив в заявке флаги «имеет исправление», «не требует тестов» и т. д., чтобы другие могли найти ее для проверки. Участие не обязательно означает написание кода с нуля. Просмотр открытых запросов на вытягивание также является очень полезным вкладом. Подробности см. в Сортировка тикетов.

Back to Top