Предполага се, че имате virtualenv
вече инсталиран
$ mkdir 02_15_project
$ cd 02_15_project
$ git clone git@github.com:SashoStoichkov/TP-Flask-App.git .
$ mkdir venv
$ cd venv
$ virtualenv 02-15-env
$ source 02-15-env/bin/activate
$ cd ../
$ pip install -r requirements.txt
$ python3 main.py
Отворете го в Incognito
прозорец.
Темата на проекта е да се направи прост онлайн магазин.
Сайтът ви трябва да позволява потребителите да се регистрират и логват с акаунтите си, след като са се регистрирали. Не е нужно да правите logout, триене на акаунти и тн.
Всеки потребител има email и парола, с които се логва. Също така за потребителя знаем име, адрес и телефон. Всички тези данни са необходими за да се регистрира потребител. Не е нужно да правите допълнителни валидации за формат, дължина и прочие на тези данни.
Свободни сте да изберете какъв точно механизъм за authentication искате да имплементирате, като не е необходимо да се изхвърляте с нещо сложно, но въпреки това неща като пароли записани в plain text не са приемливи.
Използвайте SQLite. Не използвайте PostgreSQL, MySQL, MongoDB или нещо друго.
Всеки регистриран потребител може да създава обяви за нови артикули. Връзката между артикули и потребители е many to one. Т.е. един потребител може да има много обяви за артикули и една обява има точно един потребител, който я е пуснал.
Обявата за артикул има следните полета:
- Идентификационен номер.
- Заглавие.
- Описание.
- Цена.
- Дата на пускане на обявата.
- Активна ли е обявата (т.е. купил ли е някой вече този артикул).
- Кой е купувача на артикула, ако не е активна.
Сайтът ви трябва да поддържа CRUD операции за обявите:
- Добавяне на нова обява (само ако потребителят е логнат).
- Преглеждане на списък от всички активни обяви (всеки има право да преглежда).
- Изтриване на обява (единствено от създателя ѝ).
- Промяна на данните на съществуваща обява (единствено от създателя ѝ).
Индексната страница на сайта ви следва да показва списъка от всички активни обяви (разбирайте, че неактивни обяви няма нужда да се показват тук).
Логнат потребител може да натисна бутон/линк на страницата на активен артикул за закупуването му. В следствие артикулът се отбелязва като неактивен и се записва кой е потребителя, който го е закупил.
Всеки логнат потребител може да отиде на страница, където има списък с всички негови обяви, които вече са били закупени. Потребителят трябва да може да види данните на купувача - Име, адрес и телефонен номер - за да е възможно да му ги изпрати.
Съвсем прост UI с HTML форми, линкове и тн. е достатъчен. Ако имате желание, може да направите нещо по-впечатляващо и това ще бъде единствено във ваша полза. От друга страна, интерфейсът ви се очаква да е, ако не красив, то използваем и ясен. В този ред на мисли, страници, които не са достъпни чрез потребителския интерфейс, а изискват да се пишат ръчно URL-и в браузъра не са използваем интерфейс.
Индексната страница, която показва всички активни обяви, трябва да има конфигурируем pagination. Тоест, не зареждаме всички обяви накуп, ами само първите N. Когато потребителят отиде на следващата страница, се зареждат следващите N обяви и тн. Потребителят може да избере размера на страницата от dropdown измежду няколко предефинирани опции.
Индексната страница да позволява базово търсене на обяви. Потребителят може да въведе текст в търсачката и тя трябва да филтрира списъка от активни обяви, показвайки му единствено тези, чиито заглавие или описание съдържат въведения в търсачката текст.
Това домашно ще се оценява ръчно и няма да има автоматизирани тестове за него. За да го предадете просто поставете линк към Github (Bitbucket? Нещо друго?) репозитори, което да свалим. Ще гледаме дали сте ползвали адекватно version control системата. Уверете се, че ако клонираме репото и пуснем проекта всичко ще работи. За целта, много силно препоръчвам да използвате virtualenv за проекта си. Помислете дали базата ви и всичките ѝ таблици се създават коректно автоматично.