Cetus Group
Cetus Logo
Информационные системы и программное обеспечение




Поддержка

 
Применение Python для Web - cистема управления контентом Django
Редакция 06.12.2006 : изменения 11.11.2007
А.Г. © Часть 3 - "Толстый клиент на базе CMS Django"

Система управления контентом Django предоставляет интересные возможности по работе с базами данных, которые могут быть использованы как при разработке Веб-приложений, так и программ с графическим интерфейсом пользователя. Синтез CMS с одной из GUI-библиотек для реализации "толстых" клиентов позволит использовать технологии и решения, реализованные в CMS:
-- шаблоны (паттерны) программирования;
-- механизмы доступа к данным и организации данных;
-- механизмы синхронизации моделей данных приложения со структурой БД;
-- независимость приложения от типа выбранной СУБД в пределах СУБД, поддерживаемых CMS;
-- возможности реализации на основе одного набора моделей как "толстых" клиентов (на основе GUI), так и "тонких" (на основе Web).

В качестве примера рассмотрим реализацию толстого клиента средствами Django (версия 0.96) (используем объектно-ориентированный интерфейс Django по работе с базой данных) и GUI библиотеки Qt (Qt3). Для начала средствами Django создадим проект 'djqt1' и приложение 'polls' как показано в документации к Django:

django-admin.py startproject djqt1
cd djqt1 && ./manage.py startapp polls

Сформируем модель 'Poll' приложения 'polls' (в файле polls/models.py):

from django.db import models

# Create your models here.

class Poll(models.Model):
        question = models.CharField(maxlength=200)
        pub_date = models.DateTimeField('date published')

Установим значения указанных ниже переменных в файле settings.py проекта:

DATABASE_ENGINE = 'mysql'           # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'djangodb'          # Or path to database file if using sqlite3.
DATABASE_USER = 'cetus'             # Not used with sqlite3.

ROOT_URLCONF = 'djqt1.urls'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'djqt1.polls',
)

Создадим базу данных, сгенерируем ее структуру и проверим работоспособность модели из командной строки python. Для этого установим переменную окружения 'DJANGO_SETTINGS_MODULE' и выполним следующее:

export DJANGO_SETTINGS_MODULE=settings
echo "create database djangodb" | mysql
./manage.py syncdb polls
python
>>> from poll.models import Poll
>>> from datetime import datetime
>>> p = Poll(0,"Example question",datetime.now());
>>> print p.question
>>>Example question

Теперь перейдем к Qt и ее связке с Django. Для этого создадим форму и сгенерируем для нее код python как было показано в примерах "Создание приложения с использованием программы 'designer'" и "Реализация обработчиков событий". В производном от формы классе для доступа к данным используем интерфейс Django (код Django отмечен ###-комметариями):

# -*- coding: utf-8 -*-

from form1 import *

from datetime import datetime
###импортируем описание модели 'Poll'
from polls.models import Poll

class Form1Impl(Form1):
        def __init__(self):
                Form1.__init__(self)
                self.connect(self.pushButton,SIGNAL("pressed()"),self.SlotInsert)
                self.Select()

        def Select(self):
###выбираем 'Poll'-объекты из БД
                p = Poll.objects.all()
                self.table.setNumRows(len(p))
                for i in range(len(p)):
                        self.table.setText(i,0,p[i].question)
                        self.table.setText(i,1,str(p[i].pub_date))

        def SlotInsert(self):
###создаем новый 'Poll'-объект
                p = Poll(0,question=self.lineEditName.text(),pub_date=datetime.now())
###  и сохраняем его в БД
                p.save()
                self.Select()

На этом все. Простота данного примера подтверждает высокое качество идей, положенных в основу CMS Django.


Copyright©2005, Cetus Group : All rights reserved.