Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен? |
Создание аналога Twitter
Параметры Django для проекта mytweets
Давайте обновим файл settings.py с минимальными настройками, которые нам нужны для нашего проекта mytweets. Прежде чем запускать наше приложение mytweets мы добавим множество параметров, которые мы можем увидеть в следующих изменениях. Для дополнительной информации об этом файле, посетите
https://docs.djangoproject.com/en/1.8/topics/settings/.
Для просмотра полного списка параметров и их значений, посетите
https://docs.djangoproject.com/en/1.8/ref/settings/
Обновите файл settings.py следующим содержимым:
# Стройте пути к проекту как здесь: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # Настройки разработчика для быстрого старта – для производства не годятся # Посмотрите https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ # ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: Сохраняйте секретный ключ, используемый в производстве, в секрете! SECRET_KEY = 'l@y^@ra9q(ws(amb*-$wyc&_w@)1)s!p4r04rq9od$nr_*3!nx' # ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: Не запускайте в производство, если режим отладки включен! DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = ['127.0.0.1'] # Определение приложений INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) ROOT_URLCONF = 'mytweets.urls' WSGI_APPLICATION = 'mytweets.wsgi.application' # База данных # https://docs.djangoproject.com/en/1.6/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } STATICFILES_DIRS = ( os.path.join( os.path.dirname(__file__), 'static', ), ) TEMPLATE_DIRS = ( BASE_DIR + '/templates/', ) # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ) # Internationalization # https://docs.djangoproject.com/en/1.6/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.6/howto/static-files/ STATIC_URL = '/static/'
Теперь, если мы запустим наш сервер разработки, наш экран будет выглядеть так же как и на приведенном скриншоте:
Как мы можем отметить, в шаблоне нет никаких переменных, наличие которые отличает статические страницы, от динамических. Так давайте же сделаем это. Нам нужно внести изменения в файлы views.py и base.html, как показано ниже:
- Изменения в файле views.py:
from django.views.generic import View from django.shortcuts import render class Index(View): def get(self, request): params = {} params["name"] = "Django" return render(request, 'base.html', params)
- Изменения в файле base.html:
{% load staticfiles %} <html> <head> <link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet" media="screen"> </head> <body> {% block content %} <h1>ПРИВЕТ {{name}}</h1> {% endblock %} <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script> </body> </html>
Видите, как это просто. Все, что мы сделали это просто создали отображение (называемый в Python словарем) и назначили свойству name значение Django и добавили его в функцию render () как новый параметр. Он отрисовывается в основе HTML и легко называется {{name}}. Когда он показывается, он заменяется на Django.
Мы зафиксируем все изменения, что до сих пор сделали. Прежде чем мы сделаем это, давайте создадим файл .gitignore, Все, что он делает, независимо от содержимого этого файла( или подстановки для файлов, которые мы описали внутри файла.gitignore), он предотвратит их от подтверждения изменений и посылает их на сервер подтверждения.
Как это поможет? Это может помочь во многих важных случаях использования. Предположим, что мы не хотим отправлять любые локальные файлы конфигурации на рабочий сервере. Файл .gitignore может быть спасением в таких ситуациях, а также в случае когда файлы .py генерируют свои файлы .pyc, которые компилируются во время выполнения. Нам не нужны эти двоичные файлы на сервере, так как они будут создаваться каждый раз заново при изменении кода
В командной строке Linux просто введите команду $ vim .gitignore в корне каталога c проектом и записать туда *. pyc. Затем, сохраните и выйдите как обычно.
Теперь, если мы выполняем команду git status, мы не увидим ни одного файла с расширением pyc, что означает, что Git игнорирует отслеживания файлов, которые заканчиваются расширением .pyc.
Результат выполнения команды git status может быть следующим:
On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working di-rectory) modified: mytweets/settings.py modified: mytweets/urls.py Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore .idea/ db.sqlite3 mytweets/settings.zip templates/ tweets/ no changes added to commit (use "git add" and/or "git commit -a")
Почти чисто, но так и должно быть. Мы ранее подтверждали файлы settings.py и urls.py, а теперь внесли в них изменения, а в Git для отслеживания не добавили.
Мы используем команду git add . для добавления всех изменений в каталоге. Конечно, для предотвращения ситуации, когда Git отслеживает нежелательные файлы лучше добавлять их по одному, но мы рассмотрим это в продвинутой части разработки. Для добавления требуемого файла в проект, выполните команду:
git add .
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: .gitignore modified: mytweets/settings.py modified: mytweets/urls.py new file: static/css/bootstrap-theme.css new file: static/css/bootstrap-theme.css.map new file: static/css/bootstrap-theme.min.css new file: static/css/bootstrap.css new file: static/css/bootstrap.css.map new file: static/css/bootstrap.min.css new file: static/fonts/glyphicons-halflings-regular.eot new file: static/fonts/glyphicons-halflings-regular.svg new file: static/fonts/glyphicons-halflings-regular.ttf new file: static/fonts/glyphicons-halflings-regular.woff new file: static/js/bootstrap.js new file: static/js/bootstrap.min.js new file: templates/base.html new file: tweets/ init .py new file: tweets/admin.py new file: tweets/models.py new file: tweets/tests.py new file: tweets/views.py
Подтвердите изменения соответствующим сообщением, например "Новое подтверждение".
git commit -m " Новое подтверждение" [master 195230b] Новое подтверждение 21 files changed, 9062 inser-tions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 static/css/bootstrap-theme.css create mode 100644 static/css/bootstrap-theme.css.map create mode 100644 static/css/bootstrap-theme.min.css create mode 100644 static/css/bootstrap.css create mode 100644 static/css/bootstrap.css.map create mode 100644 static/css/bootstrap.min.css create mode 100644 static/fonts/glyphicons-halflings-regular.eot create mode 100644 static/fonts/glyphicons-halflings-regular.svg create mode 100644 static/fonts/glyphicons-halflings-regular.ttf create mode 100644 static/fonts/glyphicons-halflings-regular .woff create mode 100644 static/js/bootstrap.js create mode 100644 static/js/bootstrap.min.js create mode 100644 templates/base.html create mode 100644 tweets/ init .py create mode 100644 tweets/admin.py create mode 100644 tweets/models.py create mode 100644 tweets/tests.py create mode 100644 tweets/views.py