freeCodeCamp/guide/russian/miscellaneous/creating-a-project-with-django/index.md

17 KiB
Raw Blame History

title localeTitle
Creating a Project with Django Создание проекта с помощью Django

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

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

Во-первых, давайте создадим новую виртуальную среду для этого проекта. (Если вы еще этого не сделали, отключите предыдущий файл virtualenv, набрав в терминале deactivate ). Для получения дополнительной информации о виртуальных средах и способах их использования посетите эту страницу .

Перейдите в каталог, в котором вы хотите проект Django, и введите в терминал следующее:

mkvirtualenv taskplanner --python=/usr/bin/python3 

Возможно, вам придется изменить свой путь Python, если он отличается от приведенного выше.

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

(taskplanner)<a href='https://sites.google.com/a/chromium.org/chromedriver/downloads' target='_blank' rel='nofollow'>munsterberg@Lenovo ~/workspace] $ 

Если это не похоже, просто введите:

workon taskplanner 

Теперь мы можем установить Django:

pip install Django 

Создайте наш проект Django

С установленным Django мы можем создать наш проект:

django-admin.py startproject taskplanner 

Затем перейдите в наш новый проект, набрав:

cd taskplanner 

Прежде чем что-либо сделать, давайте установим этот каталог как наш рабочий каталог с помощью virtualenvwrapper:

setvirtualenvproject 

Sidenote : для списка команд virtualenvwrapper введите virtualenvwrapper в ваш терминал.

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

Каталог проектов должен выглядеть примерно так:

taskplanner // our main working directory 
 |--- manage.py // similar to the django-admin script, you will see this used a 
               // lot throughout our project 
 |--- taskplanner 
    |--- __init__.py // this just tells python to treat this directory as a package 
    |--- settings.py // main configuration file for our project 
    |--- urls.py // we will use this to configure urls 
    |--- wsgi.py // this is used for deploying our project to a production server 

Функциональное тестирование

Разработка, основанная на испытаниях, является широко используемой передовой практикой в ​​разработке программного обеспечения. Базисно, мы хотим сначала написать тест, который обязательно сработает, а затем записать наименьшее количество кода для прохождения этого теста. С Django наша цель - написать как функциональные тесты (также известные как интеграционные тесты, сквозные тесты и т. Д.), Так и модульные тесты в процессе разработки. Не потейте, тестирование не так сложно, как кажется!

Но сначала нам нужно создать новую виртуальную среду, предназначенную для тестирования. Откройте новую вкладку в своем терминале, перейдите в каталог проекта проекта и введите:

mkvirtualenv taskplanner_test --python=/usr/bin/python3 

Теперь у вас должно быть 2 вкладки в вашем терминале, один в виртуальной среде (taskplanner), а другой в виртуальной среде (taskplanner_test).

Если вы запишете pip freeze в нашей новой тестовой среде (taskplanner_test), вы заметите, что ничего не появляется. Это связано с тем, что мы еще ничего не установили в нашей новой среде.

Итак, давайте начнем и сначала установим Django в нашу тестовую среду (taskplanner_test):

pip install Django 

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

Sidenote : вы можете использовать Chrome для тестирования интеграции, но вам нужно скачать драйвер здесь и выполнить этот вопрос переполнения стека . У Firefox была исторически более высокая производительность, чем хром при выполнении интеграционных тестов, что очень важно, поскольку по сравнению с модульными тестами интеграционные тесты очень медленные.

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

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

Затем нам нужно установить пакет под названием Selenium . Этот пакет предоставит нам WebDriver, чтобы мы могли контролировать браузер с помощью наших тестов. Selenium обычно используется для автоматизации вашего браузера.

pip install selenium 

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

mkdir functional_tests 

В каталоге taskplanner вы должны увидеть следующее:

taskplanner 
 |-- functional_tests 
 |--- manage.py 
 |--- taskplanner 
    ... 

Теперь нам нужно создать несколько файлов в нашей папке functional_tests . Мы создадим файл __init__.py (это скажет, что python будет рассматривать functional_tests такие как пакет) и файл test_all_users.py чтобы содержать наши тесты.

Давайте сделаем это сейчас:

touch functional_tests/__init__.py 
 touch functional_tests/test_all_users.py 

Sidenote : __init__.py почти всегда пустой файл. Дополнительные сведения о том, для чего он используется, см. В этом ответе stackoverflow.

Наконец, мы можем начать писать наш первый функциональный тест! Функциональные тесты предназначены для тестирования фрагментов функциональности в нашем веб-приложении. TDD с Python описывает функциональные тесты как «как приложение работает с точки зрения пользователя».

Итак, давайте test_all_users.py файл test_all_users.py в нашем текстовом редакторе. Во-первых, мы хотим импортировать webdriver selenium, и сделать это намного проще, Django предоставляет что-то известное как StaticLiveServerTestCase для тестирования в реальном времени. Давайте импортируем оба из них:

from selenium import webdriver 
 from django.contrib.staticfiles.testing import StaticLiveServerTestCase 

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

class NewVisitorTest(StaticLiveServerTestCase): 
    def setUp(self): 
        self.browser = webdriver.Firefox() 
        self.browser.implicitly_wait(2) 
 
    def tearDown(self): 
        self.browser.quit() 

Во-первых, мы создаем класс StaticLiveServerTestCase с именем NewVisitorTest, это будет содержать наши тесты, которые мы хотим запустить для нового посетителя. Затем мы имеем два метода с именем setUp и tearDown. Метод setUp инициализируется при выполнении наших тестов. Итак, для каждого теста, который мы запускаем, мы открываем Firefox и ждем 2 секунды для загрузки страницы. tearDown запускается после завершения каждого теста, этот метод закрывает браузер для нас после каждого теста.

Теперь мы можем написать наш первый тест, и Firefox откроется и закроется автоматически для нас. Теперь напишем наш тест ниже метода tearDown.

    def test_home_title(self): 
        self.browser.get('http://localhost:8000') 
        self.assertIn('Welcome to Django', self.browser.title) 

Наш первый тест, как интересно! Давайте пройдем через это. Каждый тест, который мы хотим создать, должен начинаться с «теста». Например, если бы я хотел создать тест для моего css, я бы назвал метод test_h2_css . Итак, здесь мы назвали test_home_title . Это довольно самоочевидно, что мы и хотим для наших тестов. Сначала метод приводит Firefox к URL- http://localhost:8000 , а затем проверяет, находится ли «Добро пожаловать в Django» в заголовок заголовка html.

Давайте проверим этот тест и посмотрим, что получится:

python manage.py test functional_tests 

Во-первых, что именно мы печатаем здесь? Сценарий manage.py предоставляет нам что-то под названием «тест», мы будем использовать его для выполнения всех наших тестов. Здесь мы запускаем его в нашем пакете functional_tests , который мы создали с помощью файла __init__.py .

После запуска в вашем терминале вы увидите следующее:

F 
 ====================================================================== 
 FAIL: test_home_title (functional_tests.test_all_users.NewVisitorTest) 
 ---------------------------------------------------------------------- 
 Traceback (most recent call last): 
  File "/Users/username/url/to/project/taskplanner/functional_tests/test_all_users.py", line 15, in test_home_title 
    self.assertIn('Welcome to Django', self.browser.title) 
 AssertionError: 'Welcome to Django' not found in 'Problem loading page' 
 
 ---------------------------------------------------------------------- 
 Ran 1 test in 4.524s 
 
 FAILED (failures=1) 

Так что это провалилось, но это дало нам удобный совет. Во-первых, AssertionError. «Добро пожаловать в Django» не найден в «Странице загрузки проблем». Таким образом, это означает, что заголовок http://localhost:8000 был «Страница загрузки проблемы». Если вы перейдете к URL-адресу, вы увидите, что веб-страница недоступна.

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

python manage.py runserver 

Вы должны увидеть что-то вроде следующего:

Performing system checks... 
 
 System check identified no issues (0 silenced). 
 
 You have unapplied migrations; your app may not work properly until they are applied. 
 Run 'python manage.py migrate' to apply them. 
 
 March 06, 2016 - 20:53:38 
 Django version 1.9.4, using settings 'taskplanner.settings' 
 Starting development server at http://127.0.0.1:8000/ 
 Quit the server with CONTROL-C. 

Не беспокойтесь о сообщении о непримененной миграции.

Теперь, когда у нас есть сервер, запущенный на http://localhost:8000 , снова запустите наш тест.

Вернитесь на другую вкладку терминала, taskplanner_test виртуальной среде taskplanner_test и выполните следующее:

python manage.py test functional_tests 

Вы должны увидеть следующее.

Creating test database for alias 'default'... 
 . 
 ---------------------------------------------------------------------- 
 Ran 1 test in 4.033s 
 
 OK 
 Destroying test database for alias 'default'... 

Что мы сделали до сих пор

Наш первый тест!

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

Использование шаблонов стартера

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