Описание функционирования веб-приложения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание функционирования веб-приложения



При запуске веб-приложения открывается стартовая страница как показано на рисунке 1. Где есть возможность просмотреть информацию о сайте, авторе. Также есть возможность поиска и комментирования опубликованных постов.

 

Рисунок 1. Стартовая страница

После нажатия кнопки «Войти» открывается страница авторизации в соответствии с рисунком 2.

 

Рисунок 2. Страница авторизации

 

После нажатия кнопки «Войти» открывается стартовая страница с дополнительными возможностями модерирования как показано на рисунке 3.

 

Рисунок 3. Стартовая страница с после авторизации

 

После нажатия на функцию «записи» открывается соответствующая веб-форма где показаны все записи за последний период с возможностью из редактирования или удаления как показано на рисунке 4.

Рисунок 4. Страница редактирования записей в блоге.

 

После нажатия на вкладку «Настройки» в личном кабинете открывается соответствующая веб-форма с возможностью настройки внешнего вида сайта, описании, информации об авторе, а также выбора языка интерфейса в соответствии с рисунком 5.

 

Рисунок 5. Страница настроек блог платформы

 

Также на главной странице веб-приложения если щёлкнуть по названию какого-либо поста, то открывается полный текст статьи с возможностью комментирования как показано на рисунке 6.

Рисунок 6. Страница поста с возможностью комментирования

 

Для выхода из учетной записи следует нажать на функцию «Выйти». После чего дополнительный функционал сайта будет закрыт и останется лишь возможность просмотра и комментирования постов в блоге.

 

Входные данные

Данные вводимые пользователями, а также XML данные, наход

 

Выходные данные

Интерфейс сайта и изменения в XML данных


 

ЗАКЛЮЧЕНИЕ

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

Выводы из всего этого можно сделать достаточно простые – блогосфера будет жить и развиваться. Да, она избавится от некоторого количества своих компонентов. Но если взять блогосферу в целом, то она на данный момент живее всех живых. И скорее всего, через 2-3 года начнется новый этап бурного развития блогов нового формата. А пока нас ждет плавный рост числа блогов и их качества. Кто-то будет наблюдать за процессом со стороны, а кто-то активно включится в процесс и будет создавать историю казахстанского интернета.

Говоря о созданном мною веб-приложении хочется сказать, что я доволен проделанной работой и намереваюсь развивать данный проект т.к. он мне крайне интересен. В дальнейшем развитии я буду полгаться на среду разработки Visual Studio 2010. Возможности, которые она предлагает не сравнимы ни с одной IDE, с которой я имел дело.


 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1 МакДональд Мэтью. Pro ASP.NET 4 in C# 2010, М. 2010

2 Материалы с URL http://allblog.ru/

3 Материалы с URL http://ru.wikipedia.org/wiki/Блог

4 Материалы с URL http://www.microsoft.com/visualstudio/ru-ru/

5 Общие требования к текстовым документам. ЕСКД. ГОСТ 2.105 – 95 – М.: Изд. стандартов, 1996. – 42 с.

6 Экспозито Дино. ASP.NET 2.0 Базовый курс, М.: Русская редакция, 2007.

7 Экспозито Дино. ASP.NET 2.0 Углубленное изучение, М.: Русская редакция, 2007.


 

Приложение А

Исходный код стартовой станицы default.aspx.cs на C#

#region Using

using System;

using System.Globalization;

using System.Text.RegularExpressions;

using System.Web;

using System.Xml;

using System.Collections.Generic;

using BlogEngine.Core;

using System.Web.UI;

 

#endregion

 

public partial class _default: BlogEngine.Core.Web.Controls.BlogBasePage

{

protected void Page_Load(object sender, EventArgs e)

{

if (Page.IsCallback)

return;

 

if (Request.RawUrl.ToLowerInvariant().Contains("/category/"))

{

DisplayCategories();

}

else if (Request.RawUrl.ToLowerInvariant().Contains("/author/"))

{

DisplayAuthors();

}

else if (Request.RawUrl.ToLowerInvariant().Contains("?tag="))

{

DisplayTags();

}

else if (Request.QueryString["year"]!= null || Request.QueryString["date"]!= null || Request.QueryString["calendar"]!= null)

{

if (Request.RawUrl.Contains("year="))

Redirect();

else

DisplayDateRange();

}

else if (Request.QueryString["apml"]!= null)

{

DisplayApmlFiltering();

}

else if (Request.QueryString.Count == 0 ||!string.IsNullOrEmpty(Request.QueryString["page"]) ||!string.IsNullOrEmpty(Request.QueryString["theme"]) ||!string.IsNullOrEmpty(Request.QueryString["blog"]))

{

PostList1.ContentBy = ServingContentBy.AllContent;

PostList1.Posts = Post.Posts.ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));

if (!BlogSettings.Instance.UseBlogNameInPageTitles)

Page.Title = BlogSettings.Instance.Name + " | ";

 

if (!string.IsNullOrEmpty(BlogSettings.Instance.Description))

Page.Title += Server.HtmlEncode(BlogSettings.Instance.Description);

}

 

AddMetaKeywords();

base.AddMetaTag("description", Server.HtmlEncode(BlogSettings.Instance.Description));

base.AddMetaTag("author", Server.HtmlEncode(BlogSettings.Instance.AuthorName));

}

 

private void DisplayApmlFiltering()

{

Uri url = null;

if (Uri.TryCreate(Request.QueryString["apml"], UriKind.Absolute, out url))

{

Page.Title = "APML filtered list";

try

{

Dictionary<Uri, XmlDocument> docs = Utils.FindSemanticDocuments(url, "apml");

if (docs.Count > 0)

{

foreach (Uri key in docs.Keys)

{

PostList1.ContentBy = ServingContentBy.Apml;

PostList1.Posts = Search.ApmlMatches(docs[key], 30).FindAll(delegate(IPublishable p) { return p is Post; });

PostList1.Posts.Sort(delegate(IPublishable ip1, IPublishable ip2) { return ip2.DateCreated.CompareTo(ip1.DateCreated); });

Page.Title += " for " + Server.HtmlEncode(key.Host);

break;

}

}

else

{

divError.InnerHtml = "<h1 style=\"text-align:center\">APML document could not be found</h1><br /><br />";

Page.Title = "APML not found";

}

}

catch (NotSupportedException)

{

divError.InnerHtml = "<h1 style=\"text-align:center\">The website entered doesn't contain any information about APML</h1><br /><br />";

Page.Title = "APML not found";

}

catch (System.Net.WebException)

{

divError.InnerHtml = "<h1 style=\"text-align:center\">Sorry, I couldn't connect to your website</h1><br /><br />";

Page.Title = "APML address invalid";

}

catch (XmlException)

{

divError.InnerHtml = "<h1 style=\"text-align:center\">The APML document is not valid XML</h1><br /><br />";

Page.Title = "APML document error";

}

}

else if (PostList1.Posts == null || PostList1.Posts.Count == 0)

{

divError.InnerHtml = "<h1 style=\"text-align:center\">The URL could not be resolved</h1><br /><br />";

Page.Title = "APML not found";

}

}

 

private void InvalidateCache()

{

HttpResponse.RemoveOutputCacheItem(Utils.RelativeWebRoot + "default.aspx");

}

 

private void Redirect()

{

string year = Request.QueryString["year"];

string month = Request.QueryString["month"];

string date = Request.QueryString["date"];

string page = string.IsNullOrEmpty(Request.QueryString["page"])? string.Empty: "?page=" + Request.QueryString["page"];

string rewrite = null;

 

if (!string.IsNullOrEmpty(date))

{

DateTime dateParsed = DateTime.Parse(date);

rewrite = Utils.RelativeWebRoot + dateParsed.Year + "/" + dateParsed.Month + "/" + dateParsed.Day + "/default.aspx";

}

else if (!string.IsNullOrEmpty(year) &&!string.IsNullOrEmpty(month))

{

rewrite = Utils.RelativeWebRoot + year + "/" + month + "/default.aspx";

}

else if (!string.IsNullOrEmpty(year))

{

rewrite = Utils.RelativeWebRoot + year + "/default.aspx";

}

 

if (rewrite!= null)

{

Response.Clear();

Response.StatusCode = 301;

Response.AppendHeader("location", rewrite + page);

Response.End();

}

}

 

private static readonly Regex YEAR_MONTH = new Regex("/([0-9][0-9][0-9][0-9])/([0-1][0-9])", RegexOptions.IgnoreCase | RegexOptions.Compiled);

private static readonly Regex YEAR_MONTH_DAY = new Regex("/([0-9][0-9][0-9][0-9])/([0-1][0-9])/([0-3][0-9])", RegexOptions.IgnoreCase | RegexOptions.Compiled);

 

/// <summary>

/// Adds the post's tags as meta keywords.

/// </summary>

private void AddMetaKeywords()

{

if (Category.Categories.Count > 0)

{

string[] categories = new string[Category.Categories.Count];

for (int i = 0; i < Category.Categories.Count; i++)

{

categories[i] = Category.Categories[i].Title;

}

 

string metakeywords = Server.HtmlEncode(string.Join(",", categories));

System.Web.UI.HtmlControls.HtmlMeta tag = null;

foreach (Control c in Page.Header.Controls)

{

if (c is System.Web.UI.HtmlControls.HtmlMeta && (c as System.Web.UI.HtmlControls.HtmlMeta).Name.ToLower() == "keywords")

{

tag = c as System.Web.UI.HtmlControls.HtmlMeta;

tag.Content += ", " + metakeywords;

break;

}

}

if (tag == null)

{

base.AddMetaTag("keywords", metakeywords);

}

//base.AddMetaTag("keywords", Server.HtmlEncode(string.Join(",", categories)));

}

}

 

private void DisplayCategories()

{

if (!String.IsNullOrEmpty(Request.QueryString["id"]))

{

Guid categoryId = new Guid(Request.QueryString["id"]);

PostList1.ContentBy = ServingContentBy.Category;

PostList1.Posts = Post.GetPostsByCategory(categoryId).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));

Page.Title = Category.GetCategory(categoryId).Title;

}

}

 

private void DisplayAuthors()

{

if (!string.IsNullOrEmpty(Request.QueryString["name"]))

{

string author = Server.UrlDecode(Request.QueryString["name"]);

PostList1.ContentBy = ServingContentBy.Author;

PostList1.Posts = Post.GetPostsByAuthor(author).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));

Title = "All posts by " + Server.HtmlEncode(author);

}

}

 

private void DisplayTags()

{

if (!string.IsNullOrEmpty(Request.QueryString["tag"]))

{

PostList1.ContentBy = ServingContentBy.Tag;

PostList1.Posts = Post.GetPostsByTag(Request.QueryString["tag"].Substring(1)).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));

base.Title = " All posts tagged '" + Request.QueryString["tag"].Substring(1) + "'";

//base.AddMetaTag("description", Server.HtmlEncode(BlogSettings.Instance.Description));

}

}

 

private void DisplayDateRange()

{

string year = Request.QueryString["year"];

string month = Request.QueryString["month"];

string specificDate = Request.QueryString["date"];

 

if (!string.IsNullOrEmpty(year) &&!string.IsNullOrEmpty(month))

{

DateTime dateFrom = DateTime.Parse(year + "-" + month + "-01", CultureInfo.InvariantCulture);

DateTime dateTo = dateFrom.AddMonths(1).AddMilliseconds(-1);

PostList1.ContentBy = ServingContentBy.DateRange;

PostList1.Posts = Post.GetPostsByDate(dateFrom, dateTo).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));

Title = dateFrom.ToString("MMMM yyyy");

}

else if (!string.IsNullOrEmpty(year))

{

DateTime dateFrom = DateTime.Parse(year + "-01-01", CultureInfo.InvariantCulture);

DateTime dateTo = dateFrom.AddYears(1).AddMilliseconds(-1);

PostList1.ContentBy = ServingContentBy.DateRange;

PostList1.Posts = Post.GetPostsByDate(dateFrom, dateTo).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));;

Title = dateFrom.ToString("yyyy");

}

else if (!string.IsNullOrEmpty(specificDate) && specificDate.Length == 10)

{

DateTime date = DateTime.Parse(specificDate, CultureInfo.InvariantCulture);

PostList1.ContentBy = ServingContentBy.DateRange;

PostList1.Posts = Post.GetPostsByDate(date, date).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));;

Title = date.ToString("MMMM d. yyyy");

}

else if (!string.IsNullOrEmpty(Request.QueryString["calendar"]))

{

calendar.Visible = true;

PostList1.Visible = false;

Title = Server.HtmlEncode(Resources.labels.calendar);

}

}

 

 

}

 


 

Приложение Б

Рисунок 7. Схема Visio структуры проекта



Поделиться:


Последнее изменение этой страницы: 2016-09-05; просмотров: 251; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.184.162 (0.049 с.)