Смекни!
smekni.com

Заголовок сообщения (стр. 2 из 3)

В отличие от обычных файл-ориентированных систем обработки шаблонов, таких, как ASP и PHP, Zope представляет собой в высшей степени объектно-ориентированную платформу для решения большинства возникающих при разработке WWW-приложений задач со строгим разделением данных, логики и представлений, расширяемым набором встроенных объектов и мощной моделью безопасности. Инфраструктура Zope позволяет разработчику сосредоточиться на проблеме, избавляя от забот о доступности и целостности данных и управлении доступом.

Zope предоставляет все необходимые инструменты для интеграции информации из практически любого источника в мощные, цельные и удобные в сопровождении WWW-приложения:

  • Управление через WWW;
  • Интегрированный контроль доступа;
  • Контент-менеджмент;
  • Доступ к распределенным данным;
  • Встроенные средства поиска;
  • Мощную модель разделения данных;
  • Безопасное делегирование полномочий.

Технология, положенная в основу Zope, полностью объектно ориентирована. URL WWW ресурса на самом деле - путь к объекту в содержащей его иерархии объектов, а протокол HTTP - способ послать сообщение объекту и получить от него ответ.

Zope с самого начала разрабатывался для отражения объектной модели WWW. Объекты в нем - Каталоги, Документы, Изображения и SQL запросы - иерархически упорядочены, представляя внешне привычную среду, основанную на именах. К примеру, URL "/Marketing/index.html" используется для доступа к Документу "index.html" в Каталоге "Marketing".

Для создания объектов в Zope и работы с ними, Вы используете Ваш браузер для доступа к интерфейсу управления. Все связанное с управлением и разработкой приложений может быть выполнено удаленно с использованием WWW-браузера. Интерфейс управления представляет объектную систему Zope в виде, похожем на обычный Windows Explorer, позволяя разработчику создавать и описывать объекты и даже новые типы объектов, исключая необходимость доступа к файловой системе WWW сервера.


Объекты могут располагаться в любом месте иерархии. Управляющие сайтом могут работать с ними, выбирая с помощью закладок нужные представления. Эти представления зависят от типа объекта. Объект типа ‘DTML Документ’, к примеру, имеет закладку "Edit", позволяющую редактировать исходный текст, в то время как объект типа Соединение с базой данных имеет закладки для изменения строки описания соединения и для редактирования параметров кэширования объектов. Все объекты, однако, имеют представление "Безопасность", служащее для управления полномочиями, необходимыми для доступа к объекту.

Объекты Zope хранятся в высокопроизводительной транзакционной объектной базе данных, использующей файловую систему или RDBMS для долговременного хранения. Каждый WWW запрос рассматривается в ней как отдельная транзакция с автоматическим откатом изменений в случае ошибки в приложении. Предоставлена также возможность многоуровневой отмены сделанных изменений нажатием одной кнопки. Среда Zope делает все детали доступности данных и транзакций полностью прозрачными для разработчика.

Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, кортежи).

Несомненным достоинством является то, что интерпретатор Python реализован практически на всех платформах и операционных системах. Первым таким языком был C, однако его типы данных на разных машинах могли занимать разное количество памяти и это служило некоторым препятствием при написании действительно переносимой программы. Python же таким недостатком не обладает.

Также можно выделить другие достоинства языка Python:

  • свободный - все исходные тексты интерпретатора и библиотек доступны для любого, включая коммерческое, использования;
  • интерпретируемый - "позднее связывание" ;
  • объектно-ориентированный - классическая ОО модель, включая множественное наследование;
  • расширяемый - имеет строго определенные API для создания модулей, типов и классов на C или C++;
  • встраиваемый - имеет строго определенные API для встраивания интерпретатора в другие программы;
  • сверхвысокого уровня - динамическая типизация, встроенные типы данных высокого уровня, классы, модули, механизм прерываний (исключений);

Единственным недостатком, является сравнительно невысокая скорость выполнения Python-программы, что обусловлено ее интерпретируемостью. Однако, это с лихвой окупается достоинствами языка при написании программ не очень критичных к скорости выполнения.

Глава II.

Реализация

2.1. Модернизация разделов сайта “Программирование” и ”Курсовые работы”

Важной частью курсовой работы является модернизация некоторых разделов сайта.

В разделе “Программирование” изменена логическая структура. Старая структура оказалась неудобной для доступа к информации. Была реализованна более удобная структура:

Программирование на языке Pascal

Программа курса
Лекции
Лекция 1

Лекция 2

Лабораторные работы
Лабораторная работа 1

Лабораторная работа 2

Доп. материал
Разное

Программирование в среде Delphi

Программа курса
Лекции
Лекция 1

Лекция 2

Лабораторные работы
Лабораторная работа 1

Лабораторная работа 2

Доп. материал
Разное

Программирование на языке Assembler

Программа курса
Лекции
Лекция 1

Лекция 2

Лабораторные работы
Лабораторная работа 1

Лабораторная работа 2

Доп. материал
Разное

В разделе “Курсовые работы” изменены способы обработки информации. Добавлена логическая обработка информации: из-за того, что на сайте опубликованы не все курсовые работы студентов, а только часть из них, то для унификации обработки были введены флаги, указывающие на присутствие или отсутствие текста курсовой работы:

Рассмотрим структуру xml-файла на примере xml-файла с курсовыми работами автора:

<?xml version='1.0' encoding="windows-1251"?>

<?xml:stylesheet type="text/xsl" href="../zadanie.xsl"?>

<library>

<kurs DOCI=”False”> // нет текста курсовой работы

<god> 2 курс</god>

<tema>"Исследование PE-формата исполняемых файлов Windows" (2000/2001)</tema>

<link>kurs2.htm</link>

</kurs>

<kurs DOCI=”True”> // есть текст курсовой работы

<god> 2 курс</god>

<tema> "Изучение и практическое применение XML/XSL технологий" (2001/2002)</tema>

<link>kurs3.htm</link>

</kurs>

</library>

Этот xml-файл обрабатывается с помощью технологии XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<font face="Verdana" size="2" style="cursor:hand; color:maroon;">

<xsl:for-each select="library/kurs">

<xsl:choose>

<xsl:when match=".[@DOCI='True']"> // ФЛАГ!

<DIV>

<P>

<h3>

<a CLASS="tablinks"><xsl:attribute name="href"><xsl:value-of select="kurs/link"/></xsl:attribute><xsl:value-of select="library/god"/> <xsl:value-of select="kurs/tema"/>

</a>

</h3>

</P>

</DIV>

</xsl:when>

<xsl:otherwise>

<DIV>

<b>

<h3>

</xsl:attribute><xsl:value-of select="kurs/god"/> <xsl:value-of select="kurs/tema"/>

</a>

</h3>

</b>

</DIV>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

</xsl:stylesheet>

2.2. Реализация системы поиска

Система поиска по сайту была реализована при помощи языка DTML и скриптового языка Python.

Основа системы поиска – это скрипт на языке Python. Он возвращает список файлов, в которых содержится запрашиваемая строка, а также, возвращает количество найденных документов.

Рассмотрим код скрипта:

#Скрипт получает 3 параметра: self, search_expr, cnt=0,

#где self – каталог,

#search_expr – искомое выражение,

#cnt - обнуление списка результата

#импортируем модуль string

import string

# переменная, в которой хранится результат поиска

ret=''

# число найденных файлов

count=cnt

# находим список всех DTML-документов и каталогов в директории сайта

for i in self.objectItems(['Folder',,'DTML Document']):

#берем первый элемент списка

o=i[1] #the object

#если это Папка(Folder) читаем содержимое каталога

if o.getNodeName()=="Folder":

ret1,count1=self.scr.site_search(o,search_expr,count)

ret=ret+ret1

count=count1

#переходим к поиску в фаиле: если искомое выражение пусто или #совпадение найдено

else:

if search_expr=='' or string.find(string.lower(o.raw),string.lower(search_expr)) != -1 or:

count=count+1

#То формируем результат: берем абсолютный адрес вместе со значком #документа

ret=ret+'<img src="'

if o.hasProperty('ico'): ret=ret+self.iconspath+o.ico