Поиск по блогу

четверг, 1 мая 2014 г.

Конспект: "Создаём своё первое приложение с Django, часть 1"

Выполняем команды мануала вслед за аторами. Отвлекаемся на %PYTHONPATH% (sys.path). Создаем первый сайт. Запускаем серврер... Но останавливаемся после создании базы данных для суперпользователя с паролем ... здесь есть напоминалки...
Зачем мне эти таблицы БД, если я еще не решил, чего хочу... Прежде, чем грызть Django, потратим пару дней на Pydoc и Sphinx (следующие посты)
Почему я "отвлекаюсь" на изучение Django? Логичее было бы "добить" тему с пауками, потом запустить пару-тройку бот-проектов..., а потом уже разбираться с этим движком.
То, что движет мною можно назвать страстью... и я нахожу "оправдания" своему любопытстсву:
1. Scrapy использует структуру папок и идеологию, и команды для создания проекта - все это позаимствовано в Django/ 2. Мне очень скоро понадобится "продакшен" сайт..., но я не хочу ограничиваться только блогом... хорошо бы "изобрести" гибрид блога, wiki, bugtracker, projectplanner..., crowd sourcing... 3. Нужна идея сайта, использующего скомпилированный контент с других сайтов... как работает связка django+scrapy? 4. Нужно научится планироать и выполнять "второстепенные" работы (раз, или два раза в неделю). 5. По утрам лучше учится, поскольку мозг еще не проснулся.

Проверяем версию Django и повторяев вслед за автором руководства

In [1]:
!python -c "import django; print(django.get_version())"
1.6

Последующая попытка создать проект (по инструкции) "Используя командную строку, перейдите в каталог, где вы хотите хранить код, и выполните следующую команду:" окончилась ошибкой, наверное пути не прописаны, посмотрим руководство по установке
In []:
C:\Users\kiss\Anaconda>cd C:\Users\kiss\Documents\Python-Django

C:\Users\kiss\Documents\Python-Django>import
"django-admin.py" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Users\kiss\Documents\Python-Django>
"Быстрое руководство по установке" игнорирует тему путей, потому мы просто пропишем полный путь к файлу
In []:
C:\Users\kiss\Documents\Python-Django>C:\Users\kiss\Anaconda\Lib\site-packages\django\bin\django-admin.py startproject mysite_a
Usage: django-admin.py subcommand [options] [args]

Options:
  -v VERBOSITY, --verbosity=VERBOSITY
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings=SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath=PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on exception
  --version             show program's version number and exit
  -h, --help            show this help message and exit

Type 'django-admin.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    cleanup
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    runfcgi
    runserver
    shell
    sql
    sqlall
    sqlclear
    sqlcustom
    sqldropindexes
    sqlflush
    sqlindexes
    sqlinitialdata
    sqlsequencereset
    startapp
    startproject
    syncdb
    test
    testserver
    validate

C:\Users\kiss\Documents\Python-Django>
Но так файл "виден", но выполняется с ошибкой...? Очевидно, что "внутри файла" команды, которые не видны системе, поскольку "в путях" не прописаны... Если погуглить, то найдется хорошее объяснение django-admin.py and manage.py, ниже курсивом выдержки оттуда:
The django-admin.py script should be on your system path if you installed Django via its setup.py utility. If it’s not on your path, you can find it in site-packages/django/bin within your Python installation. Consider symlinking it from some place on your path, such as /usr/local/bin.
For Windows users, who do not have symlinking functionality available, you can copy django-admin.py to a location on your existing path or edit the PATH settings (under Settings - Control Panel - System - Advanced - Environment...) to point to its installed location.
Я уже писал об этом... вроде бы при установке IPython, после этого можно посмореть переменные окружения для IPython и сделать то же самое для Django... Но есть еще какая-то переменная окружения PYTHONPATH (она е константа в коде скриптов Python). У меня нет четкого понимания, зачем она и что с ней делать...
Здесь мне пришлось отвлечься от темы, чтобы разобраться с переменными окружения. В результате я опубликовал длиннющий пост с описанием команд и мануалами. Но оказалось, что есть чудодейственное простое средство установки переменной PYTHONPATH
How to add to the pythonpath in windows 7?. Попробуем ее создать и дописать в нее второй путь:
In []:
C:\Users\kiss\Documents\Python-Django>echo %pythonpath%
%pythonpath%

C:\Users\kiss\Documents\Python-Django>set PYTHONPATH=%PYTHONPATH%;C:\Users\kiss\Documents\Python-Django

C:\Users\kiss\Documents\Python-Django>echo %pythonpath%
%PYTHONPATH%;C:\Users\kiss\Documents\Python-Django
In []:
C:\Users\kiss\Documents\Python-Django>set PYTHONPATH=%PYTHONPATH%;C:\Users\kiss\Anaconda\Lib\site-packages\django\bin

C:\Users\kiss\Documents\Python-Django>echo %PYTHONPATH%
%PYTHONPATH%;C:\Users\kiss\Documents\Python-Django;C:\Users\kiss\Anaconda\Lib\site-packages\django\bin
Теперь повторим команду
In [1]:
import sys
In [2]:
sys.path
Out[2]:
['',
 'C:\\Users\\kiss\\Documents\\Python-Django',
 'C:\\Users\\kiss\\Anaconda\\Lib\\site-packages\\django\\bin',
 'C:\\Users\\kiss\\Anaconda\\python27.zip',
 'C:\\Users\\kiss\\Anaconda\\DLLs',
 'C:\\Users\\kiss\\Anaconda\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\plat-win',
 'C:\\Users\\kiss\\Anaconda\\lib\\lib-tk',
 'C:\\Users\\kiss\\Anaconda',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\PIL',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\setuptools-2.2-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\IPython\\extensions']
Но оказывается, что несмотря на 'C:\Users\kiss\Anaconda\Lib\site-packages\django\bin' то, что путь прописан в переменной, команда не работает, вернее, работает только в том случае, если прописать полный путь к файлу:
In []:
C:\Users\kiss\Documents\Python_Django>python django-admin.py startproject mysite_1
python: can't open file 'django-admin.py': [Errno 2] No such file or directory
In []:
C:\Users\kiss\Documents\Python_Django>python C:\Users\kiss\Anaconda\Lib\site-packages\django\bin\django-admin.py startproject mysite_1
Действительно, наконец-то в C:Django создана соответствующая папка mysite1
Наверное, дело в том, что windows ничего не знает о PYTHONPATH и знать не хочет. Эту переменную ищет Python.
Чтобы Windows считал пути, надо еспользовать константу PATH. Нужно будет при случае это проверить. Хотя в обсуждении на stackoverflow об этом упоминается (ссылка в начале поста).
В руководстве по установке есть соответствующая ссылка Трудности с запуском django-admin.py

Структура папок проекта

In []:
mysite_1/
    manage.py
    mysite_1/
        __init__.py
        settings.py
        urls.py
        wsgi.py
Проверяем, есть пустой init.py
In [6]:
!chcp 65001
!dir C:\Users\kiss\Documents\Python_Django\mysite_1\mysite_1
Active code page: 65001
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Documents\Python_Django\mysite_1\mysite_1

29.04.2014  20:09    <DIR>          .
29.04.2014  20:09    <DIR>          ..
29.04.2014  20:09             1В 978 settings.py
29.04.2014  20:09               299 urls.py
29.04.2014  20:09               391 wsgi.py
29.04.2014  20:09                 0 __init__.py
               4 File(s)          2В 668 bytes
               2 Dir(s)  402В 147В 807В 232 bytes free

Распечатаем все файлы

In [10]:
%load C:\\Users\\kiss\\Document s\\Python_Django\\mysite_1\\manage.py
In []:
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite_1.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
In [7]:
%load C:\\Users\\kiss\\Documents\\Python_Django\\mysite_1\\mysite_1\\settings.py
In []:
"""
Django settings for mysite_1 project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '2r+9ve4o4$1kg%88bcg#4@1_49&hku(k15+1))mu=e9%*&rmi3'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

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 = 'mysite_1.urls'

WSGI_APPLICATION = 'mysite_1.wsgi.application'


# Database
# 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'),
    }
}

# 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/'
In [8]:
%load C:\\Users\\kiss\\Documents\\Python_Django\\mysite_1\\mysite_1\\urls.py
In []:
from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite_1.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
)
In [9]:
%load C:\\Users\\kiss\\Documents\\Python_Django\\mysite_1\\mysite_1\\wsgi.py
In []:
"""
WSGI config for mysite_1 project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
"""

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite_1.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Внешний каталог mysite/ – это просто контейнер для вашего проекта. Его название никак не используется Django, и вы можете переименовать его во что угодно.
manage.py: Скрипт, который позволяет вам взаимодействовать с проектом Django. Подробности о manage.py читайте в разделе django-admin.py and manage.py.
Внутренний каталог mysite/ - это пакет Python вашего проекта. Его название – это название пакета Python, которое вы будете использовать для импорта чего-либо из проекта (например, mysite.urls).
mysite/init.py: Пустой файл, который указывает Python, что текущий каталог является пакетом Python. (Читайте о пакетах в официальной документации Python, если вы новичок в Python.)
mysite/settings.py: Настройки/конфигурация проекта. Раздел Django settings расскажет вам все о настройках проекта.
mysite/urls.py: Конфигурация URL-ов для вашего проекта Django. Это “содержание” всех Django-сайтов. Вы можете прочитать о конфигурации URL-ов в разделе Менеджер URL-ов.
mysite/wsgi.py: Точка входа вашего проекта для WSGI-совместимых веб-серверов. Подробности читайте в разделе Развёртывание с WSGI.
In []:

Давайте проверим, что все заработало. Перейдите во внешний каталог mysite, если вы этого еще не сделали, и выполните команду python manage.py runserver
In []:
C:\Users\kiss\Documents\Python_Django\mysite_1>python manage.py runserver
Validating models...

0 errors found
April 29, 2014 - 22:19:37
Django version 1.6, using settings 'mysite_1.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
It worked! Congratulations on your first Django-powered page.
Of course, you haven't actually done any work yet. Next, start your first app by running python manage.py startapp [appname].
You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!
Следует заметить: НИКОГДА НЕ используйте этот сервер на “живом” сайте. Он создан исключительно для разработки. (Мы умеем делать Web-фреймверки, не Web-сервера.)
Если вы хотите изменить IP, передайте его вместе со значением порта. Чтобы слушать все публичные IP (полезно, если вы хотите показать свою работу на других компьютерах), используйте:
In []:
python manage.py runserver 0.0.0.0:8000
Смотрите полное описание команды runserver

Настройка базы данных

Теперь отредактируйте mysite/settings.py. Это просто Python модуль с переменными, которые являются значениями настроек Django. Если вы хотите использовать другую базу данных, установите необходимые библиотеки и измените настройки подключения к базе данных в DATABASES 'default'
По умолчанию используется SQLite. Это хороший вариант, если вы новичок в базах данных, или хотите попробовать Djagno. SQLite включен в Python, так что вам не нужно устанавливать что либо еще.
Команда syncdb анализирует значение INSTALLED_APPS и создает все необходимые таблицы в базе данных, используя настройки базы данных из файла mysite/settings.py. Вы увидите сообщение о создании таблиц и предложение создать суперпользователя. Воспользуйтесь этим предложением.
In []:
C:\Users\kiss\Documents\Python_Django\mysite_1>python manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): Y
Please enter either "yes" or "no": yes
Username (leave blank to use 'kiss'):
Email address: altersego2007@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

C:\Users\kiss\Documents\Python_Django\mysite_1>
Между делом создал суперюзера с именем kiss и паролем g...


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий