моё первое Django + MySQl + Apache приложение в windows

Как PHP разработчик я имею опыт порядка 10 лет а вот с Python как то не очень сталкивался. сейчас я попытаюсь сделать приложение основываясь только на Django документации и возможно google магии. постараюсь написать статью что она была легко понятно для людей знающий cakephp.




команды windows конзоли нужные для создания приложения
django-admin.py startproject [название проекта] создание проекта
manage.py runserver [номер порта] запуск встроенного сервера
manage.py syncdb синхронизация моделей и БД
manage.py startapp [название проекта] создание модуля

файлы настроек
settings.py почти все основные настройки
urls.pyроутер настройки
django.wsgiдля связи приложения с Apache




1.Создание проекта
cd C:\xampp\htdocs\myapps # переходим в веб папку
django-admin.py startproject myapps # создаем проект myapps в текущем каталоге


генерируется папка myapps и четыре файла :
__init__.py (стандартный файл для питоновского модуля)
manage.py (нужен для управление проектом)
settings.py (настройки )
urls.py (роутер настройки URL)


2.Настройка

2a. базы данных ( settings.py )

DATABASES = {'default': {'ENGINE': 'mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '1',
'HOST': 'localhost', }}

2a. подключаемые модули - как свои так от Д ( settings.py )

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions'
'django.contrib.sites',
'django.contrib.admin', # дъянго админ
'django.contrib.flatpages', # дъянго модуль для статических страниц
'myapps.polls' # мой модуль
)

указаны подключенные к приложению модули.

2б. Указываем пути .

добавляем в начало файла

import os
def rel(*x):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
# функция для изменения относительных путей на абсолютные

MEDIA_ROOT = rel('media')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/admin/'

TEMPLATE_DIRS = (
rel('templates') # указываем папку для видов (аналог папки views в CAKEPHP)
)



2в. URL роутер ( urls.py )

from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
(r'^polls/', include('myapps.polls.urls')), # ссылка на роурер модуля
(r'^admin/',include(admin.site.urls)), # роутер от дъянго модуля админ
(r'^$', 'myapps.polls.views.index'), # старновая страница
)

это уже роутер модуля (polls/urls.py)

from django.conf.urls.defaults import *
urlpatterns = patterns('myapps.polls.views', # приставка
(r'^$', 'index'),
(r'^(?P\d+)/$', 'detail'),
(r'^(?P\d+)/results/$', 'results'),
(r'^(?P\d+)/vote/$', 'vote'),)


3. Cоздание первого модуля
manage.py startapp polls # создается папка polls в каталоге myapps и файлы модуля.

- models.py # Модель
- views.py # аналог Controllers из cakephp

3a. создаем модель

from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()


>manage.py sql polls # просмотр генерируемого slq
>manage.py syncdb # выполняем и смотрим что появилось в БД

Модули используют таблицы в базе данных и команда manage.py syncdb "смотрит" что есть в INSTALLED_APPS и создает таблицы для этих модулей.

3б. работаем с конролером (view.py)


from django.shortcuts import render_to_response, get_object_or_404
from myapps.polls.models import Poll

def index(request):
latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})


def detail(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
return render_to_response('polls/detail.html', {'poll': p})

def results(request, poll_id):
return HttpResponse("You're looking at the results of poll %s." % poll_id)

def vote(request, poll_id):
return HttpResponse("You're voting on poll %s." % poll_id)

3в. добавляем темплайты и виды

в C:\xampp\htdocs\myapps\templates\polls

index.html
{% if latest_poll_list %}
{% for poll in latest_poll_list %}
{{ poll.question }}
{% endfor %}
{% else %}
No polls are available.
{% endif %}


detail.html
{{ poll.question }}
{% for choice in poll.choice_set.all %}
{{ choice.choice }}
{% endfor %}



ну а теперь можно уже кое что и поробовать

стартуем сервер для этого я сделал start.bat

cd C:\xampp\htdocs\myapps
manage.py runserver 80

и идем на http://localhost/admin/


вводим пароль и логин который указали при выполнении  manage.py syncdb



скачать исходники можно по этой ссылке
http://files.mail.ru/4ICRRZ

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

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