Как создать сайт на Django для начинающих на Web-сервере Denwer

14 июля 2013 г. YaGr Просмотров: 42111 RSS 20
Web design » Новости
У новичков часто возникает элементарный вопрос - с чего начать писать сайт на Django и посмотреть как он будет выглядеть реально при заливке на хостинг. Для того, чтобы посмотреть как реально будет выглядеть сайт используем Web-сервер Denwer, установленный на локальном компьютере.

Данная статья является продолжением первой части статьи Как установить Django на Denwer под Windows 7 и необходимым условием для её второй части.

Создадим сайт в виде небольшого блога, который будет выводить заглавие  статьи, контент (содержимое) дату и время создания. Воспользуемся "заготовками", которые были описаны в первой части статьи Как установить Django на Denwer под Windows 7. Кратко повторим буквально по пунктам:

  • создаем директорию z:\home\mysite.com\www:
  • переходим в z:\home\mysite.com\www и создаем проект myproject:
  • переходим в z:\home\mysite.com\www\myprodject\myproject и создаем модель core:
  • Создаем директорию z:\home\mysite.com\www\myprodject\myproject\core\templates для будущих шаблонов сайта;
  • предварительно была создана и ициализирована база данных dj на MySQL.
Создаем сайт
Для создания сайта на базе фреймворка Django фактически используются скрипты, написанные на языке Python.

1. Определяем модель, для этого открываем в любом редакторе файл .../core/models.py и после

from django.db import models

# Create your models here.

вставляем

class myproject(models.Model):

    name = models.CharField(max_length=100, unique=True)

    description = models.TextField()

    created = models.DateTimeField()

    def __unicode__(self):

        return self.name

Окончательный вид models.py:

from django.db import models

# Create your models here.

class myproject(models.Model):

    name = models.CharField(max_length=100, unique=True)

    description = models.TextField()

    created = models.DateTimeField()

    def __unicode__(self):

        return self.name

2. В файле .../myproject/myproject/urls.py. прописываем URL для страницы индекса, а также разрешаем админ панель:

from django.conf.urls.defaults import *

from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',

    # Uncomment the admin/doc line below to enable admin documentation:

    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    url(r'^admin/', include(admin.site.urls)),

    url(r'^$, 'myproject.core.views.index'),

)

Если пользователь наберёт страницу которой нет, то вернется ошибка 404.

3. Чтобы пользоваться admin группой, надо зарегистрировать модель. Создаем редактором файл .../myproject/core/admin.py и прописываем:

from django.contrib import admin

from models import Myproject

class MyprojectAdmin(admin.ModelAdmin):

    list_display = ('title', 'format_description')

    def format_description(self, modelResource):

        if len(modelMyproject.description) < 100:

            return modelMyproject.description

        else:

            return modelMyproject.description[0:100]+'...'

    format_description.admin_order_field = 'description'

admin.site.register(MyprojectAdmin)

4. Заполняем .../myproject/core/views.py следующего содержания:

# Create your views here.

from models import myproject

from django.shortcuts import render_to_response

def index(request):

    items = myproject.objects.all()

    return render_to_response('index.html', {'items': items})

5. Создаем редактором файл .../myproject/core/templates/index.html и прописываем:

<h2>myproject</h2>

{% for x in items %}

<p>{{ x.name }} - {{ x.created|date:"D d M Y" }}</p>

<p>{{ x.description }}</p>

<hr />

{% endfor %}

  Вшаблоне будет три переменных, обрабатываемых в цикле

  • {{ x.name }} - Название статьи
  • {{ x.created|date:”D d M Y” }} - дата публикации
  • {{ x.description }} - основной текст
6. Выполняем
python.exe manage.py syncdb

затем

python manage.py runserver

Теперь, набрав в браузере: http://127.0.0.1:8000/ - заходим на сайт или http://127.0.0.1:8000/admin/ - в админку, еде выполнив "Add" в "myproject" можем заполнить первую статью или несколько статей.

Это испытательный сервер. Не используйте испытательный сервер на реальных проектах, вместо него надо запускать apache + mod_wsgi (раньше назывался apache + mod_python) или FastCGI. Как это сделать описано во второй части статьи Как установить Django на Denwer под Windows 7. Кратко это будет выглядеть так:

  • устанавливаем mod_wsgi.so;
  • изменяем настройки Apache - z:\usr\local\apache\conf\httpd.conf;
  • в корне проекта создаём файл .../mysite.com/www/django.wsgi;
  • в корне проекта создаем файл .../mysite.com/www/.htaccess.

Если что-то было выполнен ранее, его можно пропустить. Кроме того, django.wsgi может располагаться в любом каталоге. Главное, прописать в .htaccess где он находится.

7. Кроме того, чтобы статика правильно отображалась, необходимо собрать всю статику в единый каталог, прописанный в настройках settings.py (в STATIC_URL =), для этого необходимо выполнить

python manage.py collectstatic

Приоткрою ёще одну "фишку", которой в интернете делятся не очень охотно  - что надо прописать в .htaccess (работающий пример):

Options +ExecCGI

AddDefaultCharset UTF-8

AddHandler wsgi-script .wsgi

AddHandler cgi-script .cgi .py

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} \.(css|js|ico|jpg|jpeg|gif|png|tif|tiff|zip|rar)$

    RewriteRule ^static/(.*)$ /myproject/static/$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L] 

index.wsg находится здесь же

#!/usr/bin/python

# coding: utf-8-

import sys, os

sys.path.append('/home/myproject.com/www')

sys.path.append('/home/myproject.com/www/myproject')

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Приведенные примеры взяты с другого реально работающего проекта, у которого структура каталогов немного отличается. данная структура была создана с помощью PyCharm. Она выглядит где-то так (каталоги без файлов):

myproject

-myproject

-core

-static

-templates

Возможно возникнет ситуация, когда Apache будет "вываливаться" после запуска.. Это связано с тем, что не настроены пути в переменной Path окружения среды Windows - см. п.2.3. статьи Как установить Django на Denwer под Windows 7.1Разработка проектов на Django – это возможность быстро получить эффективный сайт, предоставляющий бесконечное множество возможностей для расширения и усовершенствования. Но это уже тема совсем другой статьи.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us
Комментариев: 20
  1. Glitlymoldmum | 2013-08-23 в 04:24:49

    По всем вопросам пишите сразу в аську ICQ 231538

    Продаю аккаунты Odnoklassniki.ru М , акки в наличии + есть множество других аккаунтов, наличие и стоимость уточняйте в аське, такие как - Blog.ru , Mamba.ru F , Редиректы Mix , Wordpress.com и другие

    По всем вопросам пишите сразу в аську ICQ 231538

  2. По всем вопросам пишите сразу в аську ICQ 231538

    Продаю аккаунты Twitter.com 50 Plus , акки в наличии + есть множество других аккаунтов, наличие и стоимость уточняйте в аське, такие как - Gmail.com AE PVA , Nasimke.ru SMS , Yandex.ru XML SMS , GMX.com и другие

    По всем вопросам пишите сразу в аську ICQ 231538

  3. По всем вопросам пишите сразу в аську ICQ 231538

    Продаю аккаунты Pinterest.com , акки в наличии + есть множество других аккаунтов, наличие и стоимость уточняйте в аське, такие как - Odnoklassniki.ru Code , Odnoklassniki.ru Code , Mamba.ru Real Ж , Редиректы Mix и другие

    По всем вопросам пишите сразу в аську ICQ 231538

  4. Вячеслав | 2013-10-01 в 15:16:41

    url(r'^, 'myproject.core.views.index'), #Our index page, it maps to / . #Once the page is called it will look in /myproject/core/views.py for a function called index - на эту строку ругается - что тут нужно корректировать?

  5. Вячеслав | 2013-10-01 в 18:38:18

    дает ошибку в файле urls.py Как правильно прописать пути к сайту создаваемому

  6. Вячеслав, надо, как минимум, для начала запуска так:

    urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),

    url(r'^$', 'myproject.core.views.index'),

    )

    Поправил в тексте статьи.

    Спасибо за найденную неточность

    Дальнейшие URL'ы необходимо добавлять с расчета, что после нахождения необходимого, далее не просматриваются.

  7. Вячеслав | 2013-10-01 в 22:21:37

    Да, с этим я уже разобрался тоже. Далее разобрался с отступами в views.py - нужны в def

    Теперь застрял со следующим -

    DatabaseError at /

    (1146, "Table 'dj.core_myproject' doesn't exist")

    In template Z:\home\localhost\www\mysite.com\www\myproject\myproject\core\templates\index.html, error at line 2

    база у меня создана с именем dj

    таблицы такой действительно нет. Что делать дальше?

  8. Вячеслав | 2013-10-01 в 22:51:26

    И еще - здесь поподробнее -

    в админку, еде выполнив "Add" в "myproject" можем заполнить первую статью или несколько статей.

  9. Я хотел было написать ещё несколько статей, но это уже получился бы целый курс обучения. Поэтому, дописал немного статью (п.7), дополнив её "фишкой" как настроить .htaccess и скрипт index.wsgi. Этим в интернете не очень стараются делиться, а если и что-то пишут, то отдельными кусками.

    Добавил немного примера и для админки.

    Поймите, в одной статье всего не напишеш.

    Если что-то с этого поможет, буду рад.

  10. Вячеслав,

    Ошибка (1146, "Table 'dj.core_myproject' doesn't exist") наверное возникает потому, что вы пропустили пункт создания предварительно пустой БД.

    в начале статьи написано:

    "предварительно была создана и ициализирована база данных dj на MySQL."

  11. Вячеслав | 2013-10-02 в 08:01:36

    YaGr

    БД была создана с именем dj. Ведь синхронизация и runserver проходят без ошибок.

    а вот таблицы, в которой будет хранится содержание сайта, естественно, нет. Теперь разбираюсь, как ее создать. Если в index.html убрать все строки кроме первой - запускается и в админку могу зайти. Дальше пока не могу ничего делать. Ранее работал только с wordpress.

    п.7 нужен, что бы потом перенести проект на реальный сервер? А если я пока просто изучаю питон - можно без него обойтись?

  12. Вячеслав | 2013-10-05 в 17:13:32

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

  13. Вячеслав, такого быть не может. Заочно сказать тяжело, надо проверять.

    Проверяйте, чудес не бывает.

    Если админка запускается, то наиболее вероятно, вы не дооформили admin.py

    Если не запускается админка, то проверяйте settings.py - раскомментарена ли строка 'django.contrib.admin',

    и т.д.

  14. Привет из Тувы!

  15. доброкачественный сайт

  16. Аноним | 2015-04-19 в 16:02:58

    Очень подробно основы по pyhton + django много бесплатных уроков

  17. Работа в интернете

  18. Требуются работники. Обработка заказов на дому.

  19. Официальная работа в интернете с обучением.

  20. Работа в интернете

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

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

Авторизация Loginza

(обязательно)