Файл: Отчет защищен с оценкой Преподаватель В. А. Язев 2023 создание webприложения отчет о лабораторной работе 5 по курсу Технологии программирования ягту 09. 03. 04 001 лр.docx
Добавлен: 01.12.2023
Просмотров: 84
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования РФФедеральное государственное бюджетное образовательное учреждениевысшего образования«Ярославский государственный технический университет»Кафедра «Информационные системы и технологии»Отчет защищенс оценкой ________Преподаватель__________ В.А. Язев«___» ____________ 2023СОЗДАНИЕ WEB-ПРИЛОЖЕНИЯОтчет о лабораторной работе №5по курсу «Технологии программирования»ЯГТУ 09.03.04 – 001 ЛРОтчет выполнилстудент гр. ЦПИ-21____________ Н.А. Бобровский«___» ____________ 20232023Цель работы: создание WEB-приложения на ASP.Net Core MVC используя Entity Framework Core (СУБД: PostgreSQL). Тема базы данных: фильмы.Ход работы:», используемый для регистрации сообщений журнала (log messages) для контроллера:
using Microsoft.AspNetCore.Mvc;
using MoviesBDLab.Models;
using System.Diagnostics;
namespace MoviesBDLab.Controllers
{
public class HomeController : Controller
{
private readonly ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Код файла MovieController.cs, который отображает список фильмов. Метод «Index» возвращает представление со списком всех фильмов из базы данных, используя контекст базы данных «MovieContext». В методе «Index» сначала получается список всех фильмов из базы данных с помощью метода «ToList()» и сохраняется в переменной «movies», а затем список передаётся в представление, которое отображается на странице с помощью метода «View(movies)». Конструктор контроллера принимает экземпляр контекста базы данных «MovieContext», который передаётся в поле «_moviesContext» и используется для выполнения запросов к базе данных:
using Microsoft.AspNetCore.Mvc;
using MoviesBDLab.Models;
namespace MoviesBDLab.Controllers
{
public class MovieController : Controller
{
private readonly MovieContext _moviesContext;
public MovieController(MovieContext moviesContext)
{
_moviesContext = moviesContext;
}
public IActionResult Index()
{
List movies = _moviesContext.Movies.ToList();
return View(movies);
}
}
}
Код файла ErrorViewModel.cs, который представляет модель для отображения страницы с сообщением об ошибке (Error page) в ASP.NET Core MVC приложении. Класс «ErrorViewModel» содержит свойства «RequestId», он представляет идентификатор запроса, который генерируется приложением для каждого запроса, и которое может использоваться для отслеживания и регистрации ошибок, имеет тип строки и может быть пустым значением, «ShowRequestId» является свойством-аксессором, которое возвращает логическое значение, указывающее, должно ли отображаться значение свойства «RequestId» на странице, если значение не пустое, то вернётся true, а иначе – false. Данный класс используется для передачи данных в представление с сообщением об ошибке, которые отобразятся на странице:
namespace MoviesBDLab.Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}
Код файла Movie.cs, отвечает за класс модели данных для фильмов в ASP.NET Core приложении. Данный класс содержит свойства, которые представляют поля фильма. Этот класс также используется в контексте базы данных, для определения таблицы «movies» в базе данных и для доступа к данным фильмов в приложении:
using System;
using System.Collections.Generic;
namespace MoviesBDLab.Models;
public partial class Movie
{
public int id_movie { get; set; }
public string title_movie { get; set; }
public string director_movie { get; set;}
public int year_movie { get; set;}
public int duration_movie { get; set;}
public decimal rating_movie { get; set;}
}
Код файла MovieContext.cs, это класс контекста базы данных, который настраивает и управляет доступом к базе данных фильмов. Класс «MovieContext» наследуется от класса «DbContext». Этот класс содержит методы для работы с базой данных, такие как «DbSet()», который представляет набор сущностей в базе данных. Класс «MovieContext» также определяет методы «OnConfiguring» и «OnModelCreating», которые позволяют настроить базу данных фильмов. Метод «OnConfiguring» задает строку подключения к базе данных, в которой хранятся фильмы. Метод «OnModelCreating» определяет схему таблицы «movies» и ее свойства. В частности, он задает типы данных и ограничения для каждого поля таблицы. Класс "MovieContext" используется в приложении для доступа к данным фильмов в базе данных и для выполнения операций CRUD (создание, чтение, обновление, удаление) над этими данными:
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace MoviesBDLab.Models;
public partial class MovieContext : DbContext
{
public MovieContext()
{
}
public MovieContext(DbContextOptions options)
: base(options)
{
}
public virtual DbSet Movies { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=MoviesBD;Username=postgres;Password=bobr1471");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.id_movie).HasName("movies_pkey");
entity.ToTable("movies");
entity.Property(e => e.id_movie)
.UseIdentityAlwaysColumn()
.HasColumnName("id_movie");
entity.Property(e => e.title_movie)
.HasMaxLength(100)
.HasColumnName("title_movie");
entity.Property(e => e.director_movie)
.HasMaxLength(100)
.HasColumnName("director_movie");
entity.Property(e => e.year_movie)
.HasColumnName("year_movie");
entity.Property(e => e.duration_movie)
.HasColumnName("duration_movie");
entity.Property(e => e.rating_movie)
.HasColumnName("rating_movie");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
Код файла Index.cshtml страницы Home, необходим для отображения главной страницы сайта. На ней написано ФИО студента и номер лабораторной работы:
@{
ViewData["Title"] = "Home Page";
}
Выполнил студент группы ЦПИ-21
Бобровский Никита Анатольевич
Рисунок 3 – Вид главной страницы Home
Код файла Privacy.cshtml, является дополнительной страницей, которая показывает возможность создания нескольких страниц веб-приложения:
@{
ViewData["Title"] = "Privacy Policy";
}
Используйте эту страницу для подробной информации о политике конфиденциальности вашего сайта.
Рисунок 4 – Вид дополнительной страницы Privacy
Код файла Index.cshtml страницы Movie, которая отвечает за список всех фильмов, внесённых в базу данных и оформленная с помощью CSS и HTML:
@model List
DOCTYPE html>
Рисунок 5 – Вид страницы Movies с заполненной базой данных
В папке Shared находятся коды необходимые для корректного отображения представлений нашего веб-приложения, их коды соответственно:
@using MoviesBDLab
@using MoviesBDLab.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_Layout";
}
Код файла appsettings.json, в котором задаётся строка подключения веб-приложения к базе данных, указывая имя хоста, порт по которому подключается веб-приложение, название базы данных, имя пользователя и пароль, кому принадлежит данная база данных:
{
"ConnectionStrings": {
"DefaultConnetion": "Host=localhost;Port=5432;Database=MoviesBD;Username=postgres;Password=bobr1471;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Код файла Program.cs, здесь происходит настройка конфигурации ASP.NET Core веб-приложения. Сначала создается экземпляр «WebApplicationBuilder», который используется для настройки приложения. Далее определяется строка подключения к базе данных, используя конфигурацию приложения. Затем «MovieContext» добавляется в контейнер зависимостей, используя строку подключения для подключения к базе данных. Затем добавляются контроллеры с представлениями в контейнер зависимостей. В конце определяется конвейер обработки запросов и конфигурируются маршруты контроллеров. Все запросы будут обрабатываться через «app.Run()». Если приложение не находится в режиме разработки, используется «middleware» для обработки исключений и принудительной переадресации HTTP на HTTPS.:
using MoviesBDLab.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
string con = builder.Configuration.GetConnectionString("DefaultConnetion");
builder.Services.AddDbContext(option => option.UseNpgsql(con));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Создание двух новых записей:
Рисунок 6 – Добавление двух записей в базу данных
Рисунок 7 – Веб-приложение после добавления двух новых записей в базе данных
Удаление первой добавленной записи с названием «Интерстеллар»:
Рисунок 8 – Удаление записи в базе данных
Рисунок 9 – Веб-приложение после удаления записи «Интерстеллар»
Редактирование новой записи:
Рисунок 10 – Изменение названия фильма в базе данных
Рисунок 11 – Веб-приложение после изменения названия фильма
Вывод: было создано WEB-приложения на ASP.Net Core MVC используя Entity Framework Core в СУБД – PostgreSQL, с тематикой – фильмы.
-
Первый этап – создание проекта веб-приложения ASP.Net Core (Майкрософт). -
Второй этап – Создание необходимых папок для контроллеров, моделей и представлений соответственно названиям Controllers, Models, Views.
-
Третий этап – Создание необходимых файлов контроллеров, моделей и представлений для работы веб-приложения.
-
Четвёртый этап – написание кода для работы веб-приложения.
using Microsoft.AspNetCore.Mvc;
using MoviesBDLab.Models;
using System.Diagnostics;
namespace MoviesBDLab.Controllers
{
public class HomeController : Controller
{
private readonly ILogger
public HomeController(ILogger
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Код файла MovieController.cs, который отображает список фильмов. Метод «Index» возвращает представление со списком всех фильмов из базы данных, используя контекст базы данных «MovieContext». В методе «Index» сначала получается список всех фильмов из базы данных с помощью метода «ToList()» и сохраняется в переменной «movies», а затем список передаётся в представление, которое отображается на странице с помощью метода «View(movies)». Конструктор контроллера принимает экземпляр контекста базы данных «MovieContext», который передаётся в поле «_moviesContext» и используется для выполнения запросов к базе данных:
using Microsoft.AspNetCore.Mvc;
using MoviesBDLab.Models;
namespace MoviesBDLab.Controllers
{
public class MovieController : Controller
{
private readonly MovieContext _moviesContext;
public MovieController(MovieContext moviesContext)
{
_moviesContext = moviesContext;
}
public IActionResult Index()
{
List
return View(movies);
}
}
}
Код файла ErrorViewModel.cs, который представляет модель для отображения страницы с сообщением об ошибке (Error page) в ASP.NET Core MVC приложении. Класс «ErrorViewModel» содержит свойства «RequestId», он представляет идентификатор запроса, который генерируется приложением для каждого запроса, и которое может использоваться для отслеживания и регистрации ошибок, имеет тип строки и может быть пустым значением, «ShowRequestId» является свойством-аксессором, которое возвращает логическое значение, указывающее, должно ли отображаться значение свойства «RequestId» на странице, если значение не пустое, то вернётся true, а иначе – false. Данный класс используется для передачи данных в представление с сообщением об ошибке, которые отобразятся на странице:
namespace MoviesBDLab.Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}
Код файла Movie.cs, отвечает за класс модели данных для фильмов в ASP.NET Core приложении. Данный класс содержит свойства, которые представляют поля фильма. Этот класс также используется в контексте базы данных, для определения таблицы «movies» в базе данных и для доступа к данным фильмов в приложении:
using System;
using System.Collections.Generic;
namespace MoviesBDLab.Models;
public partial class Movie
{
public int id_movie { get; set; }
public string title_movie { get; set; }
public string director_movie { get; set;}
public int year_movie { get; set;}
public int duration_movie { get; set;}
public decimal rating_movie { get; set;}
}
Код файла MovieContext.cs, это класс контекста базы данных, который настраивает и управляет доступом к базе данных фильмов. Класс «MovieContext» наследуется от класса «DbContext». Этот класс содержит методы для работы с базой данных, такие как «DbSet
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace MoviesBDLab.Models;
public partial class MovieContext : DbContext
{
public MovieContext()
{
}
public MovieContext(DbContextOptions
: base(options)
{
}
public virtual DbSet
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=MoviesBD;Username=postgres;Password=bobr1471");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity
{
entity.HasKey(e => e.id_movie).HasName("movies_pkey");
entity.ToTable("movies");
entity.Property(e => e.id_movie)
.UseIdentityAlwaysColumn()
.HasColumnName("id_movie");
entity.Property(e => e.title_movie)
.HasMaxLength(100)
.HasColumnName("title_movie");
entity.Property(e => e.director_movie)
.HasMaxLength(100)
.HasColumnName("director_movie");
entity.Property(e => e.year_movie)
.HasColumnName("year_movie");
entity.Property(e => e.duration_movie)
.HasColumnName("duration_movie");
entity.Property(e => e.rating_movie)
.HasColumnName("rating_movie");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
Код файла Index.cshtml страницы Home, необходим для отображения главной страницы сайта. На ней написано ФИО студента и номер лабораторной работы:
@{
ViewData["Title"] = "Home Page";
}
Лабораторная работа #5
Выполнил студент группы ЦПИ-21
Бобровский Никита Анатольевич
Рисунок 3 – Вид главной страницы Home
Код файла Privacy.cshtml, является дополнительной страницей, которая показывает возможность создания нескольких страниц веб-приложения:
@{
ViewData["Title"] = "Privacy Policy";
}
@ViewData["Title"]
Используйте эту страницу для подробной информации о политике конфиденциальности вашего сайта.
Рисунок 4 – Вид дополнительной страницы Privacy
Код файла Index.cshtml страницы Movie, которая отвечает за список всех фильмов, внесённых в базу данных и оформленная с помощью CSS и HTML:
@model List
DOCTYPE html>
Список фильмов
| Название | Режиссёр | Год выпуска | Продолжительность | Рейтинг |
|---|---|---|---|---|
| @movie.title_movie | @movie.director_movie | @movie.year_movie | @movie.duration_movie | @movie.rating_movie |
Рисунок 5 – Вид страницы Movies с заполненной базой данных
В папке Shared находятся коды необходимые для корректного отображения представлений нашего веб-приложения, их коды соответственно:
@using MoviesBDLab
@using MoviesBDLab.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_Layout";
}
Код файла appsettings.json, в котором задаётся строка подключения веб-приложения к базе данных, указывая имя хоста, порт по которому подключается веб-приложение, название базы данных, имя пользователя и пароль, кому принадлежит данная база данных:
{
"ConnectionStrings": {
"DefaultConnetion": "Host=localhost;Port=5432;Database=MoviesBD;Username=postgres;Password=bobr1471;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Код файла Program.cs, здесь происходит настройка конфигурации ASP.NET Core веб-приложения. Сначала создается экземпляр «WebApplicationBuilder», который используется для настройки приложения. Далее определяется строка подключения к базе данных, используя конфигурацию приложения. Затем «MovieContext» добавляется в контейнер зависимостей, используя строку подключения для подключения к базе данных. Затем добавляются контроллеры с представлениями в контейнер зависимостей. В конце определяется конвейер обработки запросов и конфигурируются маршруты контроллеров. Все запросы будут обрабатываться через «app.Run()». Если приложение не находится в режиме разработки, используется «middleware» для обработки исключений и принудительной переадресации HTTP на HTTPS.:
using MoviesBDLab.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
string con = builder.Configuration.GetConnectionString("DefaultConnetion");
builder.Services.AddDbContext
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
-
Пятый этап – демонстрация работы созданного веб-приложения, создав новые записи, удалив и отредактировав их, используя pgAdmin 4 базы данных PostgreSQL.
Создание двух новых записей:
Рисунок 6 – Добавление двух записей в базу данных
Рисунок 7 – Веб-приложение после добавления двух новых записей в базе данных
Удаление первой добавленной записи с названием «Интерстеллар»:
Рисунок 8 – Удаление записи в базе данных
Рисунок 9 – Веб-приложение после удаления записи «Интерстеллар»
Редактирование новой записи:
Рисунок 10 – Изменение названия фильма в базе данных
Рисунок 11 – Веб-приложение после изменения названия фильма
Вывод: было создано WEB-приложения на ASP.Net Core MVC используя Entity Framework Core в СУБД – PostgreSQL, с тематикой – фильмы.