Автор работы: Пользователь скрыл имя, 09 Июня 2014 в 02:25, курсовая работа
Разработать систему публикации постов. Посты загружают зарегистрированные пользователи. При добавлении поста, пользователь может добавить к нему теги, возможность добавлять комментарии, есть только у зарегистрированных пользователей, также есть личный кабинет пользователя, в котором он может сменить пароль и загрузить аватар. Также пользователь может просмотреть последние добавленные посты других пользователей. Реализован поиск постов по тегам.
ВВЕДЕНИЕ………………………………………………………………..…………………4
1. ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ ТЕХНОЛОГИЙ ПРИ ПРОЕКТИРОВАНИИ……………………………………………………………...…….5
1.1 Архитектура модель-представление-контроллер……………………………..…….5
1.2 ASP.NET MVC Framework……………………………..…………………………….6
2. АНАЛИЗ ЗАДАЧИ……………………………………………………………………....9
3. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ……………………………………….……..10
3.1 Структура таблиц…………………………………………………………………….10
3.2 Диаграмма отношений базы данных……………………………………………….12
4. АНАЛИЗ ЗАДАЧИ…………………………………………………………………......13
4.1 Структура сайта………………………………………………………………………13
4.2 Главная страница……………………………………………………………………13
4.3 Регистрация…………………………………………………………………….……..14
4.4 Авторизация…………………………………………………………………………..14
4.5 Страница добавления поста…………………………………………………………15
4.6 Страница просмотра поста…………………………………………………………..16
4.7 Страница просмотра постов по определенному тегу……………………………..16
5. ОСОБЕННОСТИ РЕАЛИЗАЦИИ……………………………………….…………….17
6. РЕАЛИЗАЦИЯ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ…………………….…18
6.1 Модели………………………………………………………………………………..18
6.2 Контроллеры…………………………………………………………………………20
ЗАКЛЮЧЕНИЕ………………………………………………………………………………21
БИБЛИОГРАФИЧЕСКИЙ СПИСОК….…………………………………………………...22
ПРИЛОЖЕНИЕ………………………………………………………………………………23
1. PostController.cs………………………………………………………………………23
2. UsetController.cs………………………………………………….......................……29
3. CustomMembershipProvider.cs………………………………....................................31
4. Классы для связи с базой данных………………………............................………...37
Таблица 5 - PostTags
Поле |
Тип |
PK/FK |
NULL/NOT NULL |
PostTagID |
Int |
PK |
NOT NULL |
PostID |
Int |
NOT NULL | |
TagID |
Int |
NOT NULL |
Таблица 6- Tags
Поле |
Тип |
PK/FK |
NULL/NOT NULL |
TagID |
Int |
PK |
NOT NULL |
TagName |
nvarchar(50) |
NOT NULL |
Диаграмма отношений БД приведена на рисунке 8.
Рисунок 8 – диаграмма отношений БД
Сайт имеет следующую структуру:
- главная страница пользователя;
- регистрация;
- авторизация;
- страница добавления поста;
- страница просмотра поста и комментариев к нему;
- страница просмотра постов по определенному тегу;
- страница просмотра постов других пользователей.
Главная страница сайта (рис. 2)
Рисунок 2 - Главная страница
Главная страница сайта содержит только посты текущего пользователя, теги к ним, возможность удаления своих постов, также аватар пользователя.
Страница регистрации позволяет пользователю зарегистрироваться в системе. Внешний вид страницы приведен на рис. 3.
Рисунок 3 – Страница регистрации
Страница содержит поля ввода Login, Password. Попасть на страницу регистрации можно нажав на ссылку «Регистрация», которая находится на странице авторизации (рис.4).
Для регистрации в системе пользователь должен ввести свое имя и пароль. Все поля являются обязательными.
Страница входа представлена на рисунке 4.
Рисунок 4 – страница входа
На странице входа находятся поля для ввода логина, пароля и кнопка войти. Если введенные данные верны, то открывается главная страница. Перейти на страницу входа можно нажав на ссылку «Home», она показывается в верхнем меню и если пользователь находится на ней, то она подсвечивается синим цветом. Для выходы из системы есть кнопка «Log out».
Страница добавления поста показана на рисунке 5.
Рисунок 5 – страница добавления поста
Для добавления поста, пользователю надо всего лишь написать текст сообщения в поле input “Post Text” и добавить теги к своему посту, при нажатии на кнопку «Add Post» пост добавится в базу данных и пользователь автоматически попадет на домашнюю страницу.
Страница просмотра поста содержит текст, дату добавления, кем добавлен пост, его теги, а также комментарии к посту и возможность комментария поста. (рис. 6).
Рисунок 6 – страница просмотра поста
Зарегистрированные пользователи могут отправлять комментарии.
При нажатии на любой тег, проводится поиск постов, в котором есть такой тег, если поиск был удачным то пользователь увидит все посты, по данному тегу.
5. ОСОБЕННОСТИ РЕАЛИЗАЦИИ
В проекте для операций с данными, такими как выборка, вставка, обновление и удаление используется технология ADO.NET Entity Framework. С ее помощью можно писать запросы из кода на C# с помощью синтаксиса, используемого в LINQ.
ADO.NET Entity Framework – это платформа
доступа к данным, позволяющая
работать с данными в виде
объектов. Она позволяет
Класс User
Поля:
- UserID - уникальный идентификатор пользователя;
- UserName – имя пользователя;
- UserPassword – пароль;
- UserAvatarPath – путь к аватару;
- UserDeleted – является ли
пользователь удаленным или
- UserRegDate – дата регистрации пользователя;
- UserRoleID – роль пользователя.
Класс Post
Поля:
Класс Comment
Поля:
Класс Tag
Поля:
Класс PostTag
Поля:
Класс Role
Поля:
Для обработки команд пользователя, определения модели для работы и связывания ее с представлением было создано три контроллера:
- AccountController;
- HomeController;
- PostController;
-CommentController;
-UserController.
AccountController содержит методы для регистрации новых пользователей, входа и выхода из системы.
HomeController содержит методы
для отображения главной
PostController содержит методы для вывода, удаления, поиска постов.
CommentController нужен для добавления комментариев.
Основные методы контроллеров приведены в приложении.
В результате проделанной работы было разработано web-приложение, использующее современные технологии такие как Html, CSS3, JavaScript и паттернов проектирования (MVC и т.д).
Было разработано приложение, позволяющее добавлять и просматривать посты, комментировать и осуществлять поиск по тегам.
Проект выполнялся с использованием современных технологий, которые позволяют упростить разработку, сделать ее более эффективной и улучшить дальнейшую поддержку приложения.
Любой пользователь может без предварительной подготовки работать с данным приложением. Интуитивно-понятный интерфейс позволяет достаточно просто добавлять новые посты в новостную ленту. В свою очередь, со стороны администратора легко следить за активностью пользователей.
Приложение создано с использованием ASP.NET MVC4 фреймворка, разработчики которого уделяют большое внимание сетевой безопасности.
Разработанное Web-приложение
имеет аналогии в сети, например, сайт
блог “Twitter” (http://twitter.com/).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Twitt.Providers;
using Twitt.Models;
using System.Web.Security;
namespace Twitt.Controllers
{
public class PostController : Controller
{
//
// GET: /Post/
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult PostPage()
{
using (DbProvider _db = new DbProvider())
{
User user = _db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
if (user == null)
{
return RedirectToAction("Index", "Home");
}
return View(user);
}
}
[Authorize]
public ActionResult ShowUserPost()
{
using (DbProvider _db = new DbProvider())
{
string UserName = User.Identity.Name;
int userID = ((CustomMembershipProvider)Mem
var posts = _db.Posts.ToList<Post>().
List<PostModel> model = new List<PostModel>();
if (posts != null)
{
foreach (var post in posts)
{
if (!IsPostDeleted(post.PostID))
{
List<int> tagIds = new List<int>();
foreach (var t in _db.PostTags.Where(p => p.PostID == post.PostID))
{
}
List<string> tags = new List<string>();
foreach (var id in tagIds)
{
}
model.Add(new PostModel() { Post = post, Tags = tags });
}
}
model.Reverse();
return PartialView(model);
}
return RedirectToAction("PostPage", "Post");
}
}
[Authorize]
public ActionResult ShowLastPosts()
{
using (DbProvider _db = new DbProvider())
{
string UserName = User.Identity.Name;
int userID = ((CustomMembershipProvider)Mem
var posts = _db.Posts.ToList<Post>().
List<PostModel> model = new List<PostModel>();
if (posts != null)
{
foreach (var post in posts)
{
if (!IsPostDeleted(post.PostID))
{
List<int> tagIds = new List<int>();
foreach (var t in _db.PostTags.Where(p => p.PostID == post.PostID))
{
}
List<string> tags = new List<string>();
foreach (var id in tagIds)
{
}
model.Add(new PostModel() { Post = post, Tags = tags });
}
}
model.Reverse();
return PartialView(model);
}
return RedirectToAction("PostPage", "Post");
}
}
[Authorize]
public ActionResult DeleteUserPost(int PostID)
{
using (DbProvider _db = new DbProvider())
{
Post post = new Post();
post = _db.Posts.FirstOrDefault(p => p.PostID == PostID);
if (post != null)
{
post.PostDeleted = 1;
_db.SaveChanges();
}
return RedirectToAction("PostPage", "Post");
}
}
[Authorize]
public ActionResult AddNewPost()
{
Post post = new Post();
return View(post);
}
[Authorize]
[HttpPost]
public ActionResult AddNewPost(string PostText, string[] Tags)
{
using (DbProvider _db = new DbProvider())
{
string UserName = User.Identity.Name;
int userID = ((CustomMembershipProvider)Mem
int tagID = 0;