# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
На этом уроке мы создадим тестовый проект с использованием технологии ASP.NET на MVC шаблоне и рассмотрим структуру проекта. Отчёт отправил: 10080. FireWolf Выполнено за 1 час. 11 мин. [Показать отчёт] Научился: Действительно просто. Поигрался ещё немного с CSS. Только неудобно, что нет графического дизайнера: надо тестировать изменения в браузере, потом искать классы в открытом в VS файле с CSS... Неудобно. |
|||||
2 | Выбор темы для проекта |
|
|||
На этом уроке мы обсудим, какой сайт будем делать. Отчёт отправил: 10080. FireWolf Выполнено за 54 мин. [Показать отчёт] Научился: Схема сайта ithappens.me: .../ - главная страница, последние истории .../best - лучшие истории .../random - случайные истории .../story/add - добавить историю .../tags - теги историй .../tags/... - разные теги .../page/... - разные страницы Гм... История для сайта историй... Ну скажем было дело, давно в парке, где собирались анимешники, один знакомый менялся с другими анимешниками кассетами, а тут подъехала милиция и его забрали в отделение, так как подумали, что он нелегально фильмами торгует. В отделении поставили пару кассет, увидели, что там мультики и отпустили восвояси. Знакомый был рад, что милиционеры не стали смотреть остальные кассеты, так как там были и аниме таких жанров, что в общественных местах показывать не рекомендуется :) Сложности: Вспомнить какую-нибудь историю. |
|||||
3 | Создание схемы проекта |
|
|||
На этом уроке мы ещё раз просмотрим сайт, и выберем страницы, которые будем создавать. Отчёт отправил: 10080. FireWolf Выполнено за 1 час. 23 мин. [Показать отчёт] Научился: .../ - главная страница, последние истории ../page/index .../story/best - лучшие истории .../story/random - случайные истории .../story/add - добавить историю .../story/number/12345 - показать историю 12345 Гм... История для сайта историй... Ну скажем было дело, давно в парке, где собирались анимешники, один знакомый менялся с другими анимешниками кассетами, а тут подъехала милиция и его забрали в отделение, так как подумали, что он нелегально фильмами торгует. В отделении поставили пару кассет, увидели, что там мультики и отпустили восвояси. Знакомый был рад, что милиционеры не стали смотреть остальные кассеты, так как там были и аниме таких жанров, что в общественных местах показывать не рекомендуется :) |
|||||
4 | Создание пустых страниц |
1 тест |
|||
На этом уроке мы создадим новый пустой проект, добавим нужные контроллеры Отчёт отправил: 10080. FireWolf Выполнено за 2 час. 9 мин. [Показать отчёт] Научился: Действительно всё не так сложно и очень интересно. |
|||||
5 | Создание модели Story |
|
|||
На этом уроке мы создадим модель Story. В этой модели будят вся логика работы с историями. Отчёт отправил: 10080. FireWolf Выполнено за 4 час. 12 мин. [Показать отчёт] Научился: Здорово! Даже почти понял, что и как работает :) Пока не дошли до взаимодействия с базой, сделал простенькое хранение историй в Dictionary<int, (string, string)>, который хранит ValueTuple из C#7, и написал метод, который при инициализации модели забивает через Add туда несколько историй (заодно и метод для добавления готов). Также сделал метод Random, который тасует истории и вызывается из View ../story/random перед выводом наполнения страницы. Пока не понял, как начальный Index только заполнить. Что-то перенапраление из PageController.Index() на экземлярный StoryController.Random() оставляет страницу с наполнением по умолчанию. Надеюсь, дальше этот вопрос осветят. |
|||||
6 | Формирование меню |
|
|||
На этом уроке мы сформируем навигационное меню в шапке нашего сайта.
Отчёт отправил: 10080. FireWolf Выполнено за 7 час. 48 мин. [Показать отчёт] Научился: Добавил меню "About". Разбираюсь всё лучше и лучше. Вызывает сомнение отказ в уроке от самостоятельного пункта меню "Random" и перенаправление на View "Number". У них же разное предназначение: Random по логике выводит случайную историю из базы, а Number выводит конкретную историю по номеру, разве не так? |
|||||
7 | Установка сервера MySQL |
|
|||
На этом уроке мы установим MySQL Community Server и программу HeidiSQL для подключения к нему. Отчёт отправил: 10080. FireWolf Выполнено за 1 час. 25 мин. [Показать отчёт] Научился: Устанавливать MySQL и HeidiSQL к уже установленным MSSQL и MSSMS я не стал. Буду работать с ними. |
|||||
8 | Схема базы данных |
|
|||
На этом уроке мы создадим базу данных для нашего проекта, подготовим схему таблицы и напишем SQL запрос для её создания. Отчёт отправил: 10080. FireWolf Выполнено за 2 час. 39 мин. [Показать отчёт] Научился: Так как делал в MSSQL, то научился создавать базу данных через sqlcmd :) но создавать таблицу с колонками через консоль я поленился. Зачем, если есть MSSMS? По-моему это тема больше для отдельного курса по SQL. База данных позволяет хранить, выводить и добавлять истории с указанием заголовка, автора и времени добавления истории. |
|||||
9 | Создание SQL-запросов |
|
|||
На этом уроке мы составим список задач для нашей базы и составим SQL запросы для решения каждой задачи. Все запросы протестируем в SQL-консоли. Отчёт отправил: 10080. FireWolf Выполнено за 7 час. 2 мин. [Показать отчёт] Научился: Пришлось повозиться, чтобы найти способ сохранять русский текст в базу. Попутно выяснилось, что тип text/ntext в MSSQL является устаревшим и вместо него рекомендуется использовать varchar/nvarchar(MAX). Ещё нашёл альтернативу sqlcmd - написанную на питоне mssql-cli которая подставляет команды и красиво форматирует вывод. Ну и нашёл сервис для конвертации команд MySQL в MSSQL :) Сложности: Немного погуглить, чтобы решить проблему с русским языком в записях базы и заставить себя позаниматься командной строкой, а не только в MSSMS всё сделать :) |
|||||
10 | Подключение к базе данных |
|
|||
Мы достигли Экватора нашего проекта! На этом уроке мы подключим наш проект к созданной базе данных на MySQL. Отчёт отправил: 10080. FireWolf Выполнено за 4 час. 54 мин. [Показать отчёт] Научился: Делал для MSSQL, так что было интересно переделывать под него показанные команды для MySQL. Вроде даже разобрался как увязываются Model, View и Controller и сделал вывод на индекс и на Last Story последней истории и случайной истории на Random. |
|||||
11 | Работа над ошибками |
|
|||
На этом уроке мы создадим механизм отлова ошибок при работе с базой данных и передачи их клиенту. Отчёт отправил: 10080. FireWolf Выполнено за 3 час. 46 мин. [Показать отчёт] Научился: Мне кажется, что для хранения информации об ошибках нужен отдельный класс, чтобы не хранить в классе SQL запросов ошибки из других классов (например ошибки получения данных из результата запроса). |
|||||
12 | Запуск модели Story |
|
|||
На этом уроке мы запустим модель Story - допишем методы Number() и Random(), организуем ещё одну проверку ошибок. Отчёт отправил: 10080. FireWolf Выполнено за 12 час. 58 мин. [Показать отчёт] Научился: Очень интересно, как получается испольщовать логику построения программы на C# в создании веб-страницы. Чувствую, что по завершении курса смогу уже попробовать сделать свою страничку :) |
|||||
13 | Что такое SQL-инъекция |
|
|||
На этом уроке мы сделаем бекап базы данных, затем продемонстрируем «взлом» страницы посредством SQL-инъекции, покажем, как от этого защититься и потом восстановим базу данных. Отчёт отправил: 10080. FireWolf Выполнено за 6 час. 54 мин. [Показать отчёт] Научился: Интересно, что у меня при таком же, как в уроке, запросе, в ответ просто приходит ошибка, а не история по номеру в начале "инъекции". Видимо, какая-то разница в реализации MySQL и MSSQL. Конечно, если н епредусмотреть защиту от SQL-инъекций, то возможности для злоумышленника поистине безграничны :) Интересно почитать на эту тему, потому что подозреваю, что одной такой предосторожности, как в уроке, явно недостаточно. |
|||||
14 | Рефакторинг модели Story |
|
|||
На этом уроке мы сделаем небольшой рефакторинг класса Story.
Отчёт отправил: 10080. FireWolf Выполнено за 34 мин. [Показать отчёт] Научился: Проблемы с затенением id у меня не возникло, так как я свойства всегда пишу с большой буквы. А вместо дополнительной перегрузки вынесенного метода получения строки я просто id обозначил как необязательный аргумент со значением по умолчанию. |
|||||
15 | Работа со списком историй |
|
|||
На этом уроке мы сделаем вывод списка историй на главной странице.
Отчёт отправил: 10080. FireWolf Выполнено за 3 час. 12 мин. [Показать отчёт] Научился: Да, волшебство просто. Особенно нравятся вызовы функций из htmls кода. Я, конечно, в этом ещё слабо разбираюсь, но если нам понадобился класс, содержащий список с экземплярами этого самого класса, то, возможно, это является показанием к использованию индексатора? |
|||||
16 | Добавление истории |
|
|||
На этом уроке мы реализуем отправку истории и добавление её в базу данных. Мы рассмотрим возможные ошибки, которые могут возникнуть при этом. Отчёт отправил: 10080. FireWolf Выполнено за 10 час. 52 мин. [Показать отчёт] Научился: Научился добавлять данные из формы на странице в базу. Вообще, очень познавательно. Интересно попробовать переписать это под Entity Framework - наверное это предпочтительный способ создания сайта, но всегда полезно узнать, как оно работает, когда прописываешь всё руками. Сложности: Немного пришлось поискать, как получать Id последней совершённой записи в базу в MSSQL, так как в отличие от MySQL здесь нет удобной функции получения Id псоледней записи, а надо прописывать получение сразу в строке добавления записи в базу, причём существует несколько способов, каждый со своими особенностями. Microsoft же... |
|||||
17 | Валидация данных |
|
|||
На этом уроке мы реализуем проверку полей формы при отправке истории. Обсудим регулярное выражение для проверки адреса электропочты. Отчёт отправил: 10080. FireWolf Выполнено за 3 час. 5 мин. [Показать отчёт] Научился: Интересно про встроенную валидацию. Вотрегулярные выражения надо подучить - сильно хитрая штука и просто так не даётся. |
|||||
18 | Оформление сайта |
|
|||
На этом уроке мы займемся внешним видом нашего сайта, будем оформлять страницы, используя возможности bootstrap 3. Отчёт отправил: 10080. FireWolf Выполнено за 1 день 6 час. 12 мин. [Показать отчёт] Научился: Наверное из-за того, что у меня на чердаке в отличие от урока есть дополнительная ссылка "About", то при ширине окна браузера болье 1200px всё равно слетает вертикальное расположение элементов формы. Сложности: Так как в CSS я разбираюсь очень слабо, то найти решение проблемы пока не смог. |
|||||
19 | Размещение проекта в Интернете |
|
|||
В этом уроке мы зарегистрируемся на хостинге и разместим свой проект в Интернете, наконец-таки! Отчёт отправил: 10080. FireWolf Выполнено за 6 час. 8 мин. [Показать отчёт] Научился: Повторил процесс регистрации на хостинге и загрузку базы данных и сайта :) http://firewolf-001-site1.itempurl.com/ Сложности: Как обычно, из-за расхождения версий пришлось заливать базу данных в виде скрипта. И ТоталКоммандер коннектился к ФТП, но останавливался на процессе отображения папки, так что пришлось через сервер архивом закидывать. |
|||||
20 | Отказ от статика |
|
|||
Нам придётся отказаться от статичного класса базы данных, потому что статичный класс продолжает существование даже при новых обращениях к нему с новой страницы. Отчёт отправил: 10080. FireWolf Выполнено за 2 час. 28 мин. [Показать отчёт] Научился: Не знаю, может у меня ошибка, но если делать именно по уроку и просто сделать класс работы с SQL экземплярным, то появляются ошибки с добавлением новых записей, так как требуется конструктор без параметров. Попробовал держать пустой конструктор, но тогда не создаётся экземпляр класса работы с SQL и выскакивает ошибка. Пришлось из пустого конструктора добавить вызов конструктора с параметром с передачей ему нового класса для SQL. |
|||||
21 | ФИНАЛЬНЫЙ УРОК. Презентация |
без видео |
|||
Сделай видео-презентацию своей программы. На видео необходимо ответить на следующие вопросы: 0. Показать, что у тебя получилось. 1. Чему ты научился на этом курсе? 2. Что тебе понравилось, что нет? 3. Что ты ещё добавишь в свой проект? 4. Какой следующий курс ты будешь проходить? Отчёт отправил: 10080. FireWolf Выполнено за 1 час. 6 мин. [Показать отчёт] Научился: * Научился делать простые страницы на ASP.NET с доступом к базе данных. * В уроке с отказом от статика не был проверен функционал добавления записей, в котором появляется ошибка если просто статический класс доступа к базе данных перевести в экземплярный. * В проект следует добавить возможность редактирования и удаления записей. * Пока думаю. Видеообзор: p3F2M5dM5HY |
|||||
22 | VIP. Авторизация на сайте |
|
|||
На этом уроке мы создадим в базе данных таблицу users, добавим туда одну запись и реализуем авторизацию администратора Отчёт отправил: 10080. FireWolf Выполнено за 1 день 13 час. 27 мин. [Показать отчёт] Научился: Научился делать простую проверку логина пользователя. Ошибку с добавлением новой записи после избавления от статика я как раз на прошлом уроке заметил и исправил :) |
|||||
23 | VIP. Модерация записей |
|
|||
На этом уроке мы реализуем функционал администратора сайта. Администратор сможет подтверждать истории для публикации. Отчёт отправил: 10080. FireWolf Выполнено за 1 день 10 час. 12 мин. [Показать отчёт] Научился: Очень познавательно! Научился сохранять сессию при авторизации, делать проверку записей авторизованным пользователем, менять записи в колонке статуса истории в базе и выводить истории в зависимости от записи в колонке статуса истории. Так как в MSSQL не поддерживается enum в качестве типа записи, то реализовал через CONSTRAINT. |
|||||
24 | VIP. Установка домена |
|
|||
На этом уроке мы покажем, как просто можно купить и привязать домен к вашему проекту. |
|||||
Итого: 24 видеоурока |
8 час. 41 мин. 1 тест |
24 чел. | |||
Финалисты: Михаил Ермишин, Nromik, Елена, Аркадий, valerys Nikola, Tekashnik, Сергей, zhikharevav, Максим, Сергей Соколов, Ludmila, Алексей Хонин, Станислав, Константин, WildOrc, Алексей|BrisK|Кривицкий, alklokov, Dmitry Sinitsin, Владимир, Max, Александр, Rita, vip, Evgenii Kudriavtcev . |