Создание сайта для научно-образовательного центра "Интеллектика"
Анализ систем для создания сайта "Интеллектика". Архитектура и структура сайта; технические требования. Выбор базы данных. Процесс разработки приложения авторизации для просмотра закрытых научных проектов. Техническая документация для администратора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.01.2017 |
Размер файла | 2,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
СОДЕРЖАНИЕ
Введение
1. Анализ существующих систем для разработки сайта
1.1 Статический сайт
1.2 Динамический сайт
1.3 PHP
1.4 Ruby
1.5 Python
1.6 Joomla
1.7 Ruby on Rails
1.8 Django
2. Разработка технических требований и постановка задач выпускной квалификационной работы
3. Архитектура и структура сайта на фреймворке Django
3.1 Архитектура Django
3.2 Структура Django
3.3 Структура сайта
4. Выбор базы данных для сайта
4.1 SQLite
4.2 PostgreSQL
4.3 MySQL
4.4 Oracle
5. Разработка приложения для сайта
6. Разработка приложения авторизации для просмотра закрытых научных проектов центра
7. Тестирование сайта
7.1 Конфигурационное тестирование
7.2 Верность HTML кода
7.3 Функциональное тестирование
7.4 Тестирование безопасности
8. Разработка документации для администратора сайта
Заключение
Список использованных источников
ВВЕДЕНИЕ
С момента основания сети интернет количество пользователей неуклонно увеличивается большими шагами. Большая доля населения имеет у себя дома или на работе выход к его ресурсам. Возникает необходимость использования этого направления в информационных целях. Интернет дает прекрасную возможность фокусировать воздействие на конкретную узко профильную, целевую аудиторию, в которой заинтересована организация. Предрасположенность пользователей интернета к получению информации способствует к её более позитивному восприятию и высокой усвояемости.
Наличие у организации сайта сегодня считается не просто делом престижа, а необходимостью, если ее деятельность связана с информационными технологиями. На сегодняшний день уже не встает вопрос, нужен сайт или не нужен, но очень актуальна тема, как сделать сайт максимально эффективным с точки зрения успешной коммуникации и поддержания благоприятного имиджа.
Исходя из этого, темой выпускной квалификационной работы было выбрано создание сайта для научно-образовательного центра «Интеллектика».
Научно-образовательный центр (далее - НОЦ) создан на базе сложившейся системы подготовки специалистов и поисковых научных исследований в области создания и изучения систем и технологий интеллектуализации в рамках научных школ Федерального государственного образовательного учреждения высшего профессионального образования «Вологодский государственный университет» с учетом интересов Северо-Западного региона Российской Федерации.
Целью научно-образовательного центра является внедрение инновационных образовательных программ и поведения фундаментальных и прикладных исследований в области информатики и искусственного интеллекта, в том числе:
1) обеспечение подготовки, переподготовки и повышения квалификации специалистов, в том числе - высшей квалификации, по приоритетным и перспективным направлениям науки и технологий, базирующейся на новейших научных знаниях;
2) повышение эффективности научных исследований путем объединения усилий и ресурсов Университета;
3) осуществление инновационной и предпринимательской деятельности.
Основными задачами научно-образовательного центра «Интеллектика» являются:
1) создание необходимых условий для обеспечения подготовки, переподготовки и повышения квалификации специалистов, в том числе - высшей квалификации, базирующейся на новейших научных знаниях в области информатики и искусственного интеллекта, на соответствующих факультетах, кафедрах, в учебных и научных подразделенияхhttp://www.vstu.edu.ru/;
2) привлечение профессорско-преподавательского состава, студентов, аспирантов и докторантов к проведению научных исследований, выполняемых в . Привлечение научных работников к непосредственному участию в проведении научных исследований, осуществлении учебного процесса и совершенствовании учебно-методического обеспечения учебного процесса;
3) обеспечение использования материально-технической базы и кадрового потенциала университета для проведения учебного процесса и осуществления совместных научных исследований;
4) организация проведения совместных научных фундаментальных и прикладных исследований и выполнение работ по проблемам членов НОЦ, в том числе на основе хозяйственных договоров;
5) развитие фундаментальных и прикладных исследований в области информатики и искусственного интеллекта. Обеспечение информационной поддержки по задачам информатизации и интеллектуализации и оказание консультационных услуг предприятиям и организациям в регионе;
6) организация выставок и семинаров, переподготовки и повышения квалификации специалистов предприятий, деятельность которых связана с информатизацией и компьютерными технологиями;
7) развитие новых, прогрессивных форм инновационной деятельности, научно-технического сотрудничества с научными и образовательными учреждениями, технологическими организациями и промышленными предприятиями, фондами и другими структурами с целью совместного решения важнейших научно-технических и образовательных задач;
8) развитие международного научно-технического сотрудничества с учебными и научными заведениями зарубежных стран с целью расширения участия в мировой системе науки и образования;
9) развитие региональной инновационной инфраструктуры, в том числе участие в создании научно-производственного и образовательного консорциума региональных предприятий и образовательных учреждений.
Поэтому, чтобы завладеть вниманием пользователей необходимо создать сайт, который будет отвечать поставленным задачам, а именно отразить всю структуру научно-образовательного центра, специфику деятельности, и предоставление информации для пользователей.
Перед началом создания сайта для научно-образовательного центра, необходимо сделать анализ существующих систем и разработать технические требования для его создания. Так же ознакомиться с современными интернет - технологиями, которые будут использованы в данном проекте. Изучить программные инструменты, основные понятия при разработке сайта, учесть способы представления на страницах различной информации. Ознакомиться с правилами и советами по разработке и созданию сайтов и следовать им на практике.
ВКР состоит из 8 разделов. В первом разделе описывается анализ существующих систем для разработки сайта. Во втором разделе описывается разработка технических требований, и ставятся задачи выпускной квалификационной работы. В третьем разделе описывается структура сайта. В четвертом разделе описан выбор базы данных для сайта. В пятом разделе описан процесс разработки приложения. В шестом разделе процесс разработки приложения авторизации. В седьмом разделе приведен процесс тестирования сайта. В восьмом разделе приведена техническая документация для администратора сайта.
1. Анализ существующих систем для разработки сайта
В настоящее время в сети интернет существует большое количество сайтов, которые можно разделить на два типа, статические и динамические.
1.1 Статический сайт
Статический сайт - это набор, состоящий из нескольких HTML документов, хранящихся на веб-сервере, которые взаимосвязаны между собой ссылками. Это означает, что независимо от действий пользователя страницы всегда будет выглядеть одинаково. Если нужно изменить содержимое страницы, то приходится редактировать каждую страницу отдельно. Как правило, если адрес страницы заканчивается на .html, то это обычная статическая страница. Такие сайты обладают следующими достоинствами и недостатками:
Достоинства статических сайтов:
1) стоимостные затраты ниже;
2) минимальная нагрузка на веб-сервер.
Недостатки статических сайтов:
1) большие временные затраты на редактирование контента;
2) нецелесообразность использования в крупных проектах.
1.2 Динамический сайт
Динамические сайты состоят из динамических страниц, которые могут реагировать на действия пользователя и изменяться. Такие страницы формируются веб-сервером из нескольких файлов (шаблонов). Вся информация, как правило, хранится на веб-сервере в базе данных и когда пользователь запрашивает страницу, соответствующая информация извлекается из базы данных, вставляется в шаблон, образуя страницу, и пересылается веб-сервером в браузер пользователю. Таким образом, при обновлении содержимого сайта, необходимо просто добавить данные для новой страницы, которые затем вставляется в базу данных с помощью определенного механизма.
Достоинства динамических сайтов:
1) управление контентом производится через специальные формы, где можно легко добавлять, редактировать и удалять информацию;
2) максимальная оперативность при добавлении нового контента на сайт;
3) при добавлении или редактировании контента не требуется специальных знаний HTML, CSS;
4) возможность создания крупных многофункциональных проектов;
5) большие возможности для раскрутки.
Недостаток таких сайтов одни - это высокая стоимость создания и обслуживания.
Таким образом, целесообразней выбрать динамический сайт, который будет генерироваться по запросу браузера, а не хранятся на веб-сервере в готовом виде.
На веб-сервере обычно лежат скрипты, представляющие собой CMS (Content Management System, система управления контентом) - специальная программа, устанавливаемая на веб-сервер сайта, которая управляет всем контентом сайта (статьями, картинками и пр.) Она позволяет клиенту редактировать содержимое сайта без знаний верстки или программирования. В арсенале CMS есть ограниченное количество деталей, из которых можно построить то, что мы хотим (в пределах возможностей этой самой системы). Однако, если нужно, подключить какую-то функцию, которой в коробке этой CMS не предполагается, велика вероятность, что дешевле и проще будет поменять платформу разработки.
Так же на веб-сервере вместо CMS может быть установлен фреймворк. Framework (переводится как «каркас» с английского), фреймворк - это среда разработки, включающая предустановленный набор библиотек.
Получение страницы пользователем выглядит так:
1) пользователь запрашивает страницу сайта, набрав адрес этой страницы или просто щелкнув по ссылке на другом сайте;
2) этот адрес браузер передает веб-серверу;
3) на веб-сервере генерируется готовая html страница и передается браузеру пользователя;
4) пользователь получает страницу в свой браузер и просматривает её как и статическую страницу.
Таким образом, для обычного пользователя нет никакой разницы динамический сайт это или статический - в любом случае он получает информацию, хранящуюся на веб-сервере.
Однако даже для пользователя динамический сайт предоставляет дополнительные возможности, которые невозможно реализовать на статическом сайте - это авторизация пользователей, возможность комментировать, возможность делать выборки информации на сайте (поиск) и много другое.
Существует много языков программирования, на которых можно писать скрипты, которые генерируют динамические страницы. Самые распространенные из таких языков: PHP, Ruby, Python.
Каждый из этих языков имеет свои особенности применения. Писать скрипты можно на любом языке. Главное знать его сильные и слабые стороны и использовать их эффективно.
1.3 PHP
PHP (Hypertext PreProcessor, препроцессор гипертекста) - язык программирования, исполняемый на стороне веб-сервера, спроектированный в качестве инструмента создания динамических сайтов.
Этот язык оказался достаточно гибким и мощным, поэтому приобрёл большую популярность и используется в проектах любого масштаба, от простого блога до крупнейших веб-приложений в Интернете:
Преимущества PHP:
1) является свободным программным обеспечением, распространяемым под особой лицензией (PHP license);
2) легок в освоении на всех этапах;
3) поддерживается большим сообществом пользователей и разработчиков;
4) имеет развитую поддержку базы данных;
5) имеется огромное количество библиотек и расширений языка;
6) может использоваться в изолированной среде;
7) может быть, развёрнут почти на любом веб-сервере.
Недостатки PHP:
1) не подходит для создания десктопных приложений или системных компонентов;
2) имеет слабые средства для работы с исключениями;
3) глобальные параметры конфигурации влияют на базовый синтаксис языка, что затрудняет настройку веб-сервера и разворачивание приложений;
4) объекты передаются по значению, что смущает многих программистов, привыкших к передаче объектов по ссылке, как это делается в большинстве других языков;
5) веб-приложения, написанные на PHP, зачастую имеют проблемы с безопасностью [8].
1.4 Ruby
Ruby - динамический императивный объектно-ориентированный язык программирования, разработанный под влиянием таких языков, как Perl, Eiffel и Smalltalk.
Он характеризуется динамической типизацией и автоматическим управлением памятью. Язык Ruby используется в веб-разработке в составе открытого веб-фреймворка Rails, чаще называемого Ruby on Rails (RoR):
Преимущества Ruby:
1) открытая разработка;
2) работает на многих платформах;
3) может внедряться в HTML-разметку;
4) относится к языкам программирования сверхвысокого уровня (VHLL), то есть обладает высоким уровнем абстракции и предметным подходом в реализации алгоритмов;
5) реализует концептуально чистую объектно-ориентированную парадигму;
6) предоставляет продвинутые методы манипуляции строками и текстом;
7) легко интегрирует в свои программы высокопроизводительные серверы баз данных (DB2, MySQL, Oracle и Sybase);
8) простой и чистый синтаксис значительно облегчает программистам первые шаги в обучении этому языку;
9) имеет продвинутые средства для работы с массивами;
10) дополнительные возможности для обеспечения безопасности;
11) Встроенный отладчик.
Недостатки Ruby:
1) обучение языку выше начального уровня может оказаться непростым;
2) информационных ресурсов, посвящённых Ruby, явно недостаточно;
3) Ruby менее производителен по сравнению со многими другими языками, применяемыми в веб-разработке;
4) Ruby относительно медленно разрабатывается и развивается[9].
1.5 Python
Python широко применяется как интерпретируемый язык для скриптов различного назначения (хотя существуют и трансляторы языка Python).
Как и Ruby, Python имеет целью приблизить синтаксис реальной программы, написанной на нём, к описывающему задачу псевдокоду, что позволяет программисту уменьшить объём программы. Элегантный дизайн и эффективный, дисциплинирующий синтаксис этого языка облегчают программистам совместную работу над кодом. Python - мультипарадигмальный язык программирования.
Преимущества Python:
1) открытая разработка;
2) довольно простой в изучении, особенно на начальном этапе;
3) особенности синтаксиса стимулируют программиста писать хорошо читаемый код;
4) предоставляет средства быстрого прототипирования и динамической семантики;
5) множество полезных библиотек и расширений языка можно легко использовать в своих проектах благодаря предельно унифицированному механизму импорта и программным интерфейсам;
6) механизмы модульности хорошо продуманы и могут быть легко использованы;
7) абсолютно всё в Python является объектами в смысле ООП, но при этом объектный подход не навязывается программисту.
Недостатки Python:
1) не слишком удачная поддержка многопоточности;
2) на Python создано не так уж много качественных программных проектов по сравнению с другими универсальными языками программирования, например, с Java;
3) изначальная ограниченность средств для работы с базами данных [2] [4] [10].
На данный момент существует много систем управления содержимым сайта (CMS, Framework), но не все обладают всем необходимым функционалом для нормальной работы сайта. Поэтому проанализируем несколько систем, сравним их по критериям и выясним какая наиболее подходит для нашего сайта научно-технического центра «Интеллектика».
1.6 Joomla
Joomla - система управления содержимым (CMS), написанная на языках PHP и JavaScript, использующая в качестве хранилища базы данных СУБД MySQL или другие индустриально-стандартные реляционные СУБД. Является свободным программным обеспечением, распространяемым под лицензией GNU GPL.
Преимущества Joomla:
1) многофункциональная и безопасная система, распространяемая абсолютно бесплатно;
2) расширенный функционал CMS Joomla позволяет создавать сайты разной степени сложности, от одностраничного сайта до социальной сети. Все зависит лишь от фантазии;
3) большой выбор дополнений, расширяющих возможности сайта;
4) главное преимущество Joomla заключается в том, что большинство расширений распространяется бесплатно и на данный момент насчитывают порядка 10 000 дополнений для решения задач различного уровня сложности.
Недостатки Joomla:
1) SEO-ограниченность;
2) отсутствие поля для заполнения мета-тега <title>, в поле <title> подставляется значение заголовка статьи. Заголовок статьи практически всегда заключен в тег <H2>, а не в <H1>. Выше перечисленные упущения создают неудобства при продвижении сайта, но решаются путем установки расширение;
3) еще один минус Joomla заключается в том, что при редактировании адреса материала создается его дубль, а это негативно влияет на SEO. После редактирования URL материала на сайте появляется второй такой же материал с новым адресом, хотя в идеальном варианте должен лишь замещаться первый. По этой причине изменять адреса статей в Joomla не рекомендуется;
4) Joomla не назовешь легкой системой для изучения. По сравнению с другими CMS, изучить ее довольно-таки трудно [11].
1.7 Ruby on Rails
Ruby on Rails - фреймворк написанный на Ruby. Фреймворк Rails сочетает в себе все передовые технологии, идеи и паттерны проектирования, благодаря чему разработка на нем становится в разы проще и быстрее. Так же как и Joomla использующая в качестве хранилища базы данных СУБД MySQL или другие индустриально-стандартные СУБД.
Преимущества Ruby on Rails:
1) открытое программное обеспечение;
2) возможности такие же, как и Joomla. Ruby on Rails позволяет создавать сайты разной степени сложности, от одностраничного до социальной сети;
3) Ruby on Rails отлично обеспечен библиотеками для работы со сторонними разработками, такими как базы данных: MySQL, PostgreSQL, MongoDB, SQLite, различные веб-сервера, библиотеки для работы с графикой, звуком и видео.
Недостатки Ruby on Rails:
1) низкая скорость работы относительно компилируемых языков;
2) высокое потребление памяти[12].
1.8 Django
Django - фреймворк написанный на языке Python. Фреймворк Django строится из одного или нескольких приложений, которые делаются отключаемыми и подключаемыми. URL в Django конфигурируются явно при помощи регулярных выражений, а не выводятся автоматически из структуры моделей контроллеров. Для работы с базой данных Django использует собственный ORM (связь базы данных с объектно-ориентированным языком программирования, создавая «виртуальную объектную базу данных»), в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.
Преимущества Django:
1) исчерпывающая документация;
2) встроенный ORM (Object-relational mapper). В большинстве случаев совершенно не требуется использование SQL-синтаксиса в выражениях, что автоматом снижает риск появления SQL-injection уязвимости;
3) автоматически генерируемая админка. Это одна из уникальных функций Django у которой практически нет аналогов. Помимо того, что данная функциональность позволяет значительно сократить время на написание нужного администраторского интерфейса, она еще и дает возможность клиентам сразу начать работать с сайтом еще на начальных этапах его разработки;
4) несмотря на то, что Python не блещет скоростью, в целом Django работает достаточно быстро. Он может выдерживать высокую нагрузку, плюс имеет встроенные возможности кэширования и распределения нагрузки;
5) высокая скорость разработки.
Как таковой недостаток Django только один, это низкая скорость работы относительно компилируемых языков.
Учитывая все преимущества и недостатки популярных систем для разработки сайтов, я выбрал язык программирования Python, фреймворк Django, так как основным и главным плюсом данного фреймворка является безопасность сайта.
Некоторые возможности Django:
1) ORM, API доступа к БД с поддержкой транзакций;
2) встроенный интерфейс администратора, с уже имеющимися переводами на многие языки;
3) диспетчер URL на основе регулярных выражений;
4) расширяемая система шаблонов с тегами и наследованием;
5) система кеширования;
6) интернационализация;
7) подключаемая архитектура приложений;
8) авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID и прочие;
9) система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий;
10) библиотека для работы с формами (наследование, построение форм по существующей модели БД);
11) встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение.
Некоторые компоненты фреймворка между собой связаны слабо, поэтому их можно достаточно просто заменять на аналогичные. В то же время заменять ряд компонентов (например, ORM) довольно сложно [6] [7] [13].
2. Разработка технических требований и постановка задач выпускной квалификационной работы
Сайт научно-образовательного центра «Интеллектика» представляет собой информационный сайт, для публикации научных достижений центра, отображения его структуры и новостной информации.
Для размещения его в сети интернет, требуется выбрать хостинг-провайдера. Хостинг-провайдер - это организация или частное лицо, которое предоставляет услуги по размещению информации в сети интернет, путем предоставления дискового пространства на веб-сервере, имеющего постоянное подключение к сети интернет, а также его вычислительных мощностей. Хостинг-провайдер берет на себя все технические аспекты, связанные с работой, настройкой и поддержанием веб-сервера в рабочем состоянии. Кроме этого хостинг-провайдер может предоставлять ряд дополнительных услуг, позволяющих облегчить пользователю управление, настройку и развитие своего сайта. Но помимо этого, хостинг-провайдер должен соответствовать техническим требованиям, так как наш сайт использует язык программирования Python и фреймворк Django.
Технические требования хостинг-провайдера для сайта научно-образовательного центра «Интеллектика»:
1) обязательно наличие одного из определённых веб-серверов:
a) веб-сервер Apache с возможностью использования одного из модулей: mod_fastcgi, mod_fcgid или mod_wsgi;
b) веб-сервер Nginx с возможностью использования модуля ngx_http_fastcgi_module;
c) веб-сервер Lighttpd с возможностью использования модуля ModFastCGI.
2) хостинг-провайдер должен иметь UNIX-подобную операционную;
3) осуществлять поддержку Python версии 2.7 и выше с установленной библиотекой Python Image Library версии 1.1.6 и выше (библиотека для работы с изображениями);
4) осуществлять поддержку фреймворка Django версии 1.7 и выше, c установленными библиотеками:
a) Django-ckeditor версии 2.1.0 и выше (библиотека для работы с редактируемыми полями администратора);
b) Django-suit версии 0.1.5.7 и выше (библиотека для администраторского интерфейса).
5) Django откажется работать, если хостинг-провайдер не будет располагать одной из следующих СУБД:
a) MySQL версии 4.1 и выше (требуется установленная Python - библиотека python-mysql версии 1.2.3c1 и выше);
b) PostgreSQL версии 8.2 и выше (требуется установленная Python - библиотека psycopg2 версии 2.0 и выше);
c) Oracle версии 9i и выше (требуется установленная Python - библиотека cx_Oracle версии 5.0.1 и выше) [6] [7] [11].
При размещении сайта на хостинге, необходимо выбрать доменное имя для сайта. Доменное имя (имя сайта, домен) -- это идентификатор сайта, его адрес в сети Интернет, который однозначно идентифицирует сайт, как для пользователя, так и для поисковых систем.
При выборе домена, нужно следовать некоторым рекомендациям:
1) длинна доменного имени, не должна превышать 63 знака:
2) в имени могут быть только латинские символы, числа и дефис. При этом дефис не может быть использован в начале и в конце домена;
3) доменное имя должно ассоциироваться с названием и содержанием сайта;
4) доменное имя должно быть уникально;
5) использование ключевых слов в доменном имени.
Учитывая все рекомендации к доменному имени, оптимальным выбором стало выбрать имя «intellectika-vogu.ru».
После выбора доменного имени остается его только зарегистрировать.
При создании сайта для научно-образовательного центра «Интеллектика» так же следует учесть адаптивный дизайн, то есть, что бы во всех популярных веб-браузерах сайт отображался одинаково.
Целью выпускной квалификационной работы является создание сайта научно-образовательного центра «Интеллектика».
Для достижения поставленной цели необходимо решить следующие задачи:
1) разработать сайт для научно-образовательного центра;
2) провести тестирование;
3) разработать документацию;
4) разместить в сети интернет.
3. Архитектура и структура сайта на фреймворке DJANGO
Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется представление (англ. View), а презентационная логика представления реализуется в Django уровнем Шаблонов (англ. Template). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV). Архитектура Django представлена на рисунке 3.1.
Рисунок 3.1 - Архитектура Django
3.1 Архитектура Django
Архитектура Django состоит из четырех основных компонентов:
1) модель данных являются сердцевиной любого современного веб-приложения. Модель - это важнейшая часть приложения, которое постоянно обращается к данным при любом запросе из любой сессии. Любая модель является стандартным Python классом. Объектно-ориентированный mapper (ORM) обеспечивает таким классам доступ непосредственно к базам данных. Если бы не было ORM, пришлось бы писать запросы непосредственно на SQL. Модель обеспечивает облегченный механизм доступа к слою данных, инкапсулирует бизнес-логику. Модель не зависит от конкретного приложения. Данными можно манипулировать даже из командной строки, не используя при этом веб-сервер;
2) представление выполняют разнообразные функции, в том числе контролируют запросы пользователя, выдают контекст в зависимости от его роли. View - это обычная функция, которая вызывается в ответ на запрос какого-то адреса (URL) и возвращает контекст;
3) шаблоны являются формой представления данных. Шаблоны имеют свой собственный простой метаязык и являются одним из основных средств вывода на экран;
4) URL механизм внешнего доступа к представлениям (view). Встроенные в URL регулярные выражения делают механизм достаточно гибким. При этом одно представление может быть сконфигурировано к нескольким URL, предоставляя доступ различным приложениям. Здесь поддерживается философия закладок: URL становятся самодостаточными и начинают жить независимо от представления.
В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL [6].
С точки зрения многоуровневой архитектуры приложения, модель является самым нижним уровнем, или фундаментом. Представления и шаблоны могут добавляться и удаляться, изменять порядок ввода/вывода данных и их представления, но модель остается практически неизменной.
Модель включает широкий диапазон потенциальных ловушек, одна из которых связана с изменением программного кода модели уже после развертывания приложения. Несмотря на то, что изменяется всего лишь программный код модели, тем не менее, в действительности изменяется структура базы данных, а это часто отражается на данных, уже хранящихся в ней.
Представления в значительной степени (иногда полностью) формируют логику приложений на платформе Django. Их определение выглядит обманчиво просто, функции на языке Python, связанные с одним или более адресами URL и возвращающие объекты ответов HTTP.
Для отображения результатов в разметку HTML, которая часто является конечным результатом работы приложения, большинство разработчиков приложений на платформе Django используют язык шаблонов. Шаблоны, по сути, являются текстовыми документами в формате HTML, со специальным форматированием там, куда выводятся значения, получаемые динамически, поддерживающие возможность использовать простые логические конструкции, такие как циклы и другие. Когда от представления требуется вернуть документ HTML, оно обычно указывает шаблон, передает в него информацию для отображения и использует отображенный шаблон в своем ответе [7].
Первоначальная разработка Django, как средства для работы новостных ресурсов, достаточно сильно отразилась на его архитектуре: он предоставляет ряд средств, которые помогают в быстрой разработке сайтов информационного характера. Так, например, разработчику не требуется создавать контроллеры и страницы для административной части сайта, в Django есть встроенное приложение для управления содержимым, которое можно включить в любой сайт, сделанный на Django, и которое может управлять сразу несколькими сайтами на одном веб-сервере. Административное приложение позволяет создавать, изменять и удалять любые объекты наполнения сайта, протоколируя все совершённые действия, и предоставляет интерфейс для управления пользователями и группами.
3.2 Структура Django
Структура Django проста. Где проект - это законченный сайт или приложение, где приложение - это автономное в Django-приложение. Приложение основано на принципе, что это должна быть единая вещь, и она должна работать. Django предоставляет возможность автогенерации файлов базовой структуры для того, чтобы продвинуть вперед разработку и добавление возможностей. Таким образом, проект - это собрание приложений, а приложение может быть написано, как отдельная сущность и может быть легко импортирована в проект [7].
Для создания проекта Django, в терминале или в командной строке нужно создать и активировать виртуальное окружение. Виртуальное окружение будет изолировать зависимости языка программирования Python и Django для каждого отдельного проекта. Это значит, что изменения одного сайта никогда не затронут другие сайты, которые будут разрабатываться параллельно.
После создания и активации виртуального окружения создаётся проект Django, в нашем случае он будет называться intellektika. Проект представляет собой каталог с названием intellectika, в котором автоматически создаются файлы базовой структуры.
Intellectika
Intellectika
__int__.py
settings.py
urls.py
wsgi.py
templates
manage.py
Внешний каталог Intellectika - это просто контейнер для нашего проекта. Его название никак не используется Django, и мы можете переименовать его во что угодно. Скрипт manage.py, позволяет нам взаимодействовать с проектом Django. Внутренний каталог intellectika - это пакет Python нашего проекта. Его название - это название пакета Python, которое мы будете использовать для импорта чего-либо из проекта. __init__.py - это пустой файл, который указывает Python, что текущий каталог является пакетом Python. Settings.py - это настройки/конфигурация проекта. Urls.py - это конфигурация URL для нашего проекта Django. Wsgi.py - это точка входа нашего проекта для WSGI-совместимых веб-серверов.
Каждое приложение Django состоит из пакета Python, который следует некоторым соглашениям. Django содержит команду, которая создает структуру для нового приложения, что позволяет нам сосредоточиться на написании кода, а не на создании каталогов. Наши приложения будет соответствовать вкладкам меню сайта, то есть для каждой вкладки будет создано отдельное приложение.
3.3 Структура сайта
Структура сайта для пользователей выглядит, как показано на рисунке 3.2.
Рисунок 3.2 - Структура сайта
4. Выбор базы данных для сайта
Существует масса различных баз данных, которые можно использовать для нужд Django, и каждая из них требует наличия как самого программного обеспечения, реализующего базу данных, так и библиотеки для языка Python, которая обеспечит взаимодействие с ней.
4.1 SQLite
Название SQLite говорит само за себя - это «легковесная» реализация базы данных SQL. В отличие от PostgreSQL, MySQL и многих коммерческих баз данных, таких как Oracle или MS SQL, база данных SQLite не является самостоятельным сервером, это просто библиотека, реализующая интерфейс доступа к дисковым файлам базы данных. Как и другие «легковесные» реализации типично сложных служб.
Преимущество SQLite:
1) простота в настройке и использовании;
2) низкая нагрузка на сервер.
Недостатки SQLite:
1) недостаточная функциональность;
2) невысокая производительность при работе с большими объемами данных.
Вследствие всего этого SQLite прекрасно подходит для быстрого запуска процесса разработки или для маленьких сайтов, где нет необходимости устанавливать полноценный веб-сервер баз данных. Однако, после этапа начального обучения, а также для более серьезных случаев развертывания необходимо будет приобрести нечто более существенное.
Чтобы иметь возможность взаимодействовать с базой данных SQLite, потребуется библиотека для языка Python. Используя Python 2.7, в нашем распоряжении имеется встроенный модуль sqlite3.
В отличие от серверов баз данных, описываемых ниже, SQLite не требует явного создания базы данных или механизма управления пользователями. Вместо этого просто выбирается каталог в файловой системе для базы данных (один из тех, что доступен веб-серверу для чтения и записи) и его имя записывается в виде параметра DATABASES в файле settings.py. После этого в указанном каталоге будет создан файл базы данных при обычном использовании утилиты manage.py.
4.2 PostgreSQL
PostgreSQL (часто это название сокращают до «Postgres») - это полноценный веб-сервер баз данных, обладающий широким спектром функциональных возможностей и давней историей развития, который является одним из ведущих приложений баз данных, распространяемых с открытыми исходными текстами. Эта база данных рекомендуется к использованию основными разработчиками Django, которые дают весьма высокие оценки ее качеству.
Чтобы иметь возможность взаимодействовать с базой данных Postgres из программного кода на языке Python, нам потребуется библиотека psycopg2.
Создание баз данных и пользователей в Postgres выполняется достаточно просто, в состав Postgres по умолчанию входят отдельные утилиты командной строки, такие как createuser и createdb, названия которых говорят сами за себя. Как только мы узнаем имя суперпользователя и пароль, мы сможем выполнить следующий пример и настроить базу данных и добавить пользователя для вашего проекта на платформе Django:
$ createuser -P django_user
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
Password:
$ createdb -U django_user django_db
Password:
В этом примере создается новая учетная запись django_user базы данных, с правом создания баз данных, которая затем используется для создания новой базы данных django_db. Выполнив эти действия и указав имя пользователя и базы данных в файле settings.py (вместе с паролем, присвоенным пользователю), мы сможем использовать утилиту manage.py для создания и обновления таблиц в базе данных.
4.3 MySQL
Еще одним господствующим сервером баз данных, распространяемым с открытыми исходными текстами, является MySQL. В отличие от некоторых других серверов баз данных, MySQL включает в себя два внутренних механизма баз данных, отличающихся набором возможностей: первый механизм - это MyISAM, в котором отсутствует поддержка транзакций и внешних ключей, но имеется поддержка полнотекстового поиска. Другой механизм -InnoDB, более новый и обладающий более широкими возможностями, но в настоящее время он не поддерживает полнотекстовый поиск. Существуют и другие механизмы, но эти два используются наиболее часто.
Для организации взаимодействий с MySQL в платформе Django отдается предпочтение библиотеке python-mysql.
Создание баз данных в MySQL обычно выполняется с помощью многоцелевого инструмента администрирования mysqladmin. Как и в случае с Postgres, прежде чем мы сможем создать новую учетную запись для проекта на платформе Django, нам необходимо выяснить имя суперпользователя базы данных и пароль. Обычно суперпользователь называется root и чаще всего изначально не имеет пароля (что следует исправить, как только появится такая возможность). Таким образом, создание базы данных выглядит примерно так, как показано ниже.
$ mysqladmin -u root create django_db
В отличие от Postgres, управление пользователями в MySQL выполняется исключительно на уровне базы данных, поэтому, чтобы создать пользователя django_user базы данных, нам необходимо сразу же воспользоваться командной оболочкой SQL, которая называется mysql и выполнить следующий пример.
$ mysql -u root
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.51a-6 (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> GRANT ALL PRIVILEGES ON django_db.* TO
'django_user'@'localhost'
IDENTIFIED BY 'django_pass';
Query OK, 0 rows affected (0.00 sec)
mysql>
Теперь можно изменить настройки в файле settings.py и приступить к использованию команд manage.py.
4.4 Oracle
Последняя база данных, которая в настоящее время поддерживается платформой Django - это коммерческое предложение компании Oracle.
Библиотека для организации взаимодействий с базой данных Oracle из программного кода на языке Python называется cx_oracle.
Двумя базами данных, которые в настоящее время не поддерживаются напрямую платформой Django, являются Microsoft SQL Server и IBM DB2.
Для нашего приложения на платформе Django мы будем использовать базу данных MySQL. После создания пользователя для базы данных, подключим её к Django. В файле settings.py редактируем параметр DATABASES.
Следующим шагом используем утилиту manage.py запускаем команду migrate. Она автоматически создает все нужные таблицы для работы Django в базе данных.
В Django большинство взаимодействий с базой данных осуществляется посредством механизма объектно-ориентированного отображения (Object-Relational Mapper или ORM) - функциональности, имеющейся, помимо Django, и в других современных инфраструктурах веб-разработки, таких как Rails. Системы ORM обретают все большую популярность среди разработчиков, так как они автоматизируют множество типичных взаимодействий с базой данных и используют знакомый объектно-ориентированный подход вместо инструкций SQL [6] [7].
Проект на платформе Django состоит из приложений. Опишем создание приложения вывода новостей и запись их в нашу базу данных.
После создания проекта intellectika нам нужно добавить в него приложение вывода новостей. Создаем приложение с использованием утилиты manager.py и команды startproject news, где news это название приложения.
После создания, каталог нашего проекта выглядит так:
Intellectika
Intellectika
__int__.py
settings.py
urls.py
wsgi.py
news
migrations
templates
__init__.py
admin.py
models.py
tests.py
urls.py
views.py
templates
manage.py
Файл для взаимодействия с базой данных - models.py. Urls.py - это отдельный файл URL в котором прописывается URL для отображения приложения новостей. Файл admin.py - нужен исключительно для удобства настройки отображения моделей в административной панели. views.py - файл управления логикой приложения. Файл tests.py - в нем описываются тесты для нашего приложения.
В файле models.py создаём модель News с нужными полями для отображения наших новостей.
# -*- coding: utf-8 -*-
from django.db import models
from django.utils import timezone
from ckeditor_uploader.fields import RichTextUploadingField
class News(models.Model):
news_title = models.CharField(max_length=200,
vebose_name='Заголовок:')
news_text = RichTextUploadingField(verbose_name='Текстовое поле:')
news_file = models.FileField(blank=True, null=True, upload_to=
'files/news/%Y/%m', verbose_name='Файл')
news_date = models.DateField(verbose_name='Дата:')
news_date_time_published = models.DateTimeField(default=timezone.now,
verbose_name='Дата и время публикации:')
class Meta():
db_table = 'news'
verbose_name_plural = 'Новости'
def __unicode__(self):
return self.news_title
CharField - это текстовое поле для хранения коротких или длинных строк. RichTextUploadingField - редактируемое текстовое поле. Поле FileField используется для загрузки файлов. DateField и DateTimeField - поля отображение времени и даты. Так же в классе Meta мы указываем название таблицы в базе данных.
Некоторые приложения используют минимум одну таблицу в базе данных, поэтому нам необходимо их создать перед тем, как мы будем их использовать. Для этого с использованием утилиты manager.py и команды migrate, Django автоматически создаёт таблицу news в нашей базе данных и добавляет к ней уникальное поле id.
Для вывода новостей из базы данных нам нужно создать функцию представления в файле views.py.
# -*- coding: utf-8 -*-
from django.shortcuts import render, render_to_response
from news.models import News
from django.core.paginator import Paginator
def news_all(request,page_number=1):
news_all = News.objects.order_by('-news_date_time_published')
news_page = Paginator(news_all, 5)
return render_to_response('news_all.html', {'news_all':
news_page.page(page_number)})
Где ключу news_all будет присвоено значение «News.objects.order_by('-news_date_time_published')», означающее, что нужно вывести все объекты из класса News, отсортированные по полю news_date_time_published.Так же Django поддерживает одновременную работу с несколькими базами данных.
научный сайт база данный приложение
5. Разработка приложения для сайта
Проект сайта на фреймворке Django состоит из приложений, которые соответствуют вкладкам главного меню сайта. Рассмотрим алгоритм создания приложения вывода проектов научно-образовательного центра «Интеллектика».
Каталог нашего проекта выглядит следующим образом:
Intellectika
Intellectika
__int__.py
settings.py
urls.py
wsgi.py
templates
manage.py
Для создания приложения используем утилиту manage.py с командой startapp project, где project - это имя нашего приложения. В каталоге нашего проекта создается папка с названием нашего приложения.
Intellectika
Intellectika
__int__.py
settings.py
urls.py
wsgi.py
project
migrations
templates
__init__.py
admin.py
models.py
tests.py
urls.py
views.py
templates
manage.py
Теперь редактируем файл settings.py. В параметр INSTALLED_APPS добавляем имя нашего приложения project.
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ckeditor',
'ckeditor_uploader',
'project',)
В созданном нами приложении имеется файл models.py, в котором мы будем описывать поля модели нашего приложения. Создаем модель вывода проектов, этапов разработки и описываем все поля. Модели будут иметь связь «один ко многим», то есть у одного проекта может быть много этапов разработки.
# -*- coding: utf-8 -*-
from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField
class Projects(models.Model):
projects_title = models.CharField(max_length=200,
verbose_name='Заголовок: ')
projects_text = RichTextUploadingField(verbose_name='Текстовое поле: ')
projects_date = models.DateField(verbose_name='Дата: ')
class Meta():
db_table = 'Projects'
verbose_name_plural = 'Проекты центра'
def __unicode__(self):
return self.projects_title
class Stage(models.Model):
stage_title = models.CharField(max_length=200, verbose_name='Заголовок
этапа: ')
stage_files = models.FileField(blank=True, null=True, upload_to=
'files/project/%Y/%m', verbose_name='Файл: ')
stage_date = models.DateField(verbose_name='Дата: ')
stage_projects = models.ForeignKey(Projects)
class Meta():
db_table = 'Stage'
verbose_name_plural = 'Этапы проекта'
def __unicode__(self):
return self.stage_title
После создания моделей, добавляем их в нашу базу данных с помощью команды migrate.
Когда модели были созданы и добавлены в базу данных, переходим к редактированию файлов urls.py, которые отвечают за конфигурацию URL нашего проекта и приложений. Первым редактируем файл urls.py нашего проекта. В нем добавляются URL ссылки для наших приложений.
# -*- coding: utf-8 -*-
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.static import static
from intellectica import settings
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url(r'^projects/', include('project.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Мы указываем, что после имени нашего домена, если встречено projects, будет перенаправление в файл urls.py нашего приложения.
Далее нам нужно отредактировать файл urls.py нашего приложения. Файл urls.py нашего приложения очень похож на urls.py нашего проекта, но тут уже идет не перенаправление, а вызов функций нашего приложения, как показано ниже в примере.
from django.conf.urls import url, include
from project import views
urlpatterns = [
url(r'^(\d+)/$', views.projects),
url(r'^num/(?P<project_id>\d+)/$', views.project),]
Теперь нам нужно определить функции вывода нашего приложения. Вывод проектов должен быть таков, что на странице выводятся заголовки всех проектов и при нажатии на заголовок проекта идет перенаправление на полное описание этого проекта. Для этого реализуем две функции. Первая выводит заголовки всех проектов, а вторая выводит описание проекта. Так же для вывода заголовков проекта, нужно осуществить механизм постраничного вывода информации (пагинации).
В функции projects и project реализуем вывод всех объектов из базы данных, созданных моделями projects и stage (выборка проектов и этапов разработки) в шаблоны project.html и progects.html. В функциях мы так же определяем id, что бы этапы разработки проекта соответствовали самому проекту.
# -*- coding: utf-8 -*-
from django.shortcuts import render, render_to_response
from django.core.paginator import Paginator
from project.models import Projects, Stage
def projects(request, page_number=1):
projects_all = Projects.objects.order_by('-projects_date')
news_page = Paginator(projects_all, 5)
return render_to_response('projects.html', {'projects_all':
news_page.page(page_number) })
def project(request, project_id=1):
args = {}
args['project'] = Projects.objects.get(id=project_id)
args['stage'] = Stage.objects.filter(stage_projects_id=project_id)
return render_to_response('project.html', args)
В каталоге templates нашего приложения, мы создаем файлы project.html и progects.html, которые будут являться шаблонами вывода нашего приложения.
В файле projects.html мы добавляем значение ключей из функции projects, как показано ниже в примере.
{% load staticfiles %}
{% block content %}
<div class="projects">
<h2>Проекты научно-образовательного центра "Интеллектика"</h2>
{% for project in projects_all %}
<a href="/projects/num/{{ project.id }}/">
<h3 class="title">
{{ project.projects_title }}
<p class="date">{{ project.projects_date }}</p>
</h3>
</a>
<a href="/projects/num/{{ project.id }}/">
<h3 class="title">
{{ project.projects_title }}
<p class="date">{{ project.projects_date }}</p>
</h3>
</a>
{% endfor %}
<div style="text-align: center">
{% if projects_all.has_previous %}
<a class="button" href="/projects/{{ projects_all.previous_page_number
}}">Назад</a>
{% else %}
<span style="color: #C7DAFF">Назад</span>
{% endif %}
Страница {{ projects_all.number }} из {{ projects_all.paginator.num_pages
}}
{% if projects_all.has_next %}
<a class="button" href="/projects/{{ projects_all.next_page_number
}}">Вперед</a>
{% else %}
<span style="color: #C7DAFF">Вперед</span>
{% endif %}
</div>
</div>
{% endblock %}
В нем мы описываем вывод всех заголовков проектов, где заголовки будут ссылками на проект по их id. В нем так же необходимо реализовать кнопки пагинатора, добавленного в функцию projects.
В файле projects.html мы добавляем значение ключей из функции projects.
{% load staticfiles %}
{% block content %}
<div class="projects">
<h3>{{ project.projects_title }}</h3>
<div>{{ project.projects_text|safe }}</div>
<p class="date">Дата публикации: {{ project.projects_date}}</p>
<div class="stage">
<h4>{{ s.stage_title }}</h4>
{% if s.stage_files %}
<a href="{{ s.stage_files.url }}" class="file">Скачать файл</a>
{% endif %}
<p class="date">Дата публикации: {{ s.stage_date }}</p>
</div>
{% endfor %}
<h3>{{ project.projects_title }}</h3>
<div>{{ project.projects_text|safe }}</div>
<p class="date">Дата публикации: {{ project.projects_date}}</p>
{% for s in stage %}
<div class="stage">
<h4>{{ s.stage_title }}</h4>
{% if s.stage_files %}
<a href="{{ s.stage_files.url }}" class="file">Скачать файл</a>
{% endif %}
<p class="date">Дата публикации: {{ s.stage_date }}</p>
</div>
{% endfor %}
</div>
{% endblock %}
В projects.html мы осуществляем вывод проекта со всеми добавленными и относящимися к этому проекту этапами.
Таким образом, по определенным URL будет вызвана нужная нам функция, которая передаст в шаблон необходимые данные.
Подобные документы
Проектирование web-сайта. Пользовательские персонажи, детальная концепция сайта. Разработка скелетной схемы страниц, информационной архитектуры. Создание прототипа web-сайта. Выбор среды разработки. CMS системы и их анализ. Стадии проектирования сайта.
курсовая работа [346,7 K], добавлен 18.09.2016Актуальность создания фирменного web-сайта. Разработка, внедрение web-сайта под названием "Удачная постройка". Анализ существующих программных решений, выбор инструментальных средств разработки. Архитектура сайта, структура данных. Тестирование и отладка.
дипломная работа [4,7 M], добавлен 19.01.2017Выбор инструментальных и программных средств для создания сайта. Структура программного продукта. Создание сайта при помощи программы WordPress. Тестирование разработанной программы. Разработка структуры и дизайна сайта. Наполнение сайта контентом.
курсовая работа [1,0 M], добавлен 09.01.2014Процесс разработки Web-сайта. Состав и содержание работ по созданию подсистемы. Требования к Web-сайту. Определение сущностей модели базы данных. Разработка логической модели базы данных. Реализация PHP-скриптов и заполнение базы данных Web-сайта.
дипломная работа [8,2 M], добавлен 29.06.2011Особенности создания страниц на языке APS.NET, создание и формы обращение к базам данных. Интерфейс автоматического вывода определнного столбца базы данных в элементы управления. Структура базы данных, принцип работы страниц сайта, настройка приложения.
курсовая работа [387,3 K], добавлен 02.03.2010Понятие сайта и их классификация - корпоративные, презентационные, тематические, интернет-магазины. Язык гипертекстовой разметки HTML и его средства разработки. Виртуальный web-сервер Denver и MySQL базы. Этапы разработки сайта и структура навигации.
дипломная работа [2,4 M], добавлен 13.01.2015Формулировка требований к разработке и оформлению информационного сайта предприятия. Описание архитектуры сайта, меню навигации и алгоритма работы, листинг программного кода. Выбор серверной части и процесс отладки. Методы продвижения сайта в Интернете.
курсовая работа [4,6 M], добавлен 18.01.2014Выбор и описание программных средств и среды разработки реализации сайта, требования к их функциональности. Концепция и содержание веб-сайта, его детальная концепция и внутренняя структур, дизайн. Технические и программные требования при разработке.
курсовая работа [3,7 M], добавлен 19.11.2015Методы и технологии создания виртуальных магазинов. Программные средства для создания сайта. Разработка php-модуля. Технические возможности СУБД MySQL. Приложения для создания графики и дизайна. Логическая структура сайта. Разработка базы данных.
курсовая работа [248,1 K], добавлен 24.04.2012Описание логической структуры таблиц базы данных для разработки web-приложения с помощью технологий ado.net и asp.net. Система меню, программы и модули, используемые в работе сайта. Класс, выполняющий операции и связующий информацию сайта с базой данной.
курсовая работа [104,5 K], добавлен 26.09.2012