Skip to content
This repository has been archived by the owner on Mar 7, 2021. It is now read-only.

SashoStoichkovArchive/TP-Flask-App

Repository files navigation

How to run

Предполага се, че имате 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 прозорец.

Git log

Онлайн магазин

Темата на проекта е да се направи прост онлайн магазин.

Authentication

Сайтът ви трябва да позволява потребителите да се регистрират и логват с акаунтите си, след като са се регистрирали. Не е нужно да правите logout, триене на акаунти и тн.

Всеки потребител има email и парола, с които се логва. Също така за потребителя знаем име, адрес и телефон. Всички тези данни са необходими за да се регистрира потребител. Не е нужно да правите допълнителни валидации за формат, дължина и прочие на тези данни.

Свободни сте да изберете какъв точно механизъм за authentication искате да имплементирате, като не е необходимо да се изхвърляте с нещо сложно, но въпреки това неща като пароли записани в plain text не са приемливи.

База данни

Използвайте SQLite. Не използвайте PostgreSQL, MySQL, MongoDB или нещо друго.

Обяви

Всеки регистриран потребител може да създава обяви за нови артикули. Връзката между артикули и потребители е many to one. Т.е. един потребител може да има много обяви за артикули и една обява има точно един потребител, който я е пуснал.

Обявата за артикул има следните полета:

  • Идентификационен номер.
  • Заглавие.
  • Описание.
  • Цена.
  • Дата на пускане на обявата.
  • Активна ли е обявата (т.е. купил ли е някой вече този артикул).
  • Кой е купувача на артикула, ако не е активна.

Сайтът ви трябва да поддържа CRUD операции за обявите:

  • Добавяне на нова обява (само ако потребителят е логнат).
  • Преглеждане на списък от всички активни обяви (всеки има право да преглежда).
  • Изтриване на обява (единствено от създателя ѝ).
  • Промяна на данните на съществуваща обява (единствено от създателя ѝ).

Индексната страница на сайта ви следва да показва списъка от всички активни обяви (разбирайте, че неактивни обяви няма нужда да се показват тук).

Закупуване на артикул

Логнат потребител може да натисна бутон/линк на страницата на активен артикул за закупуването му. В следствие артикулът се отбелязва като неактивен и се записва кой е потребителя, който го е закупил.

Страница за закупени артикули

Всеки логнат потребител може да отиде на страница, където има списък с всички негови обяви, които вече са били закупени. Потребителят трябва да може да види данните на купувача - Име, адрес и телефонен номер - за да е възможно да му ги изпрати.

UI

Съвсем прост UI с HTML форми, линкове и тн. е достатъчен. Ако имате желание, може да направите нещо по-впечатляващо и това ще бъде единствено във ваша полза. От друга страна, интерфейсът ви се очаква да е, ако не красив, то използваем и ясен. В този ред на мисли, страници, които не са достъпни чрез потребителския интерфейс, а изискват да се пишат ръчно URL-и в браузъра не са използваем интерфейс.

Pagination

Индексната страница, която показва всички активни обяви, трябва да има конфигурируем pagination. Тоест, не зареждаме всички обяви накуп, ами само първите N. Когато потребителят отиде на следващата страница, се зареждат следващите N обяви и тн. Потребителят може да избере размера на страницата от dropdown измежду няколко предефинирани опции.

Search

Индексната страница да позволява базово търсене на обяви. Потребителят може да въведе текст в търсачката и тя трябва да филтрира списъка от активни обяви, показвайки му единствено тези, чиито заглавие или описание съдържат въведения в търсачката текст.

Предаване

Това домашно ще се оценява ръчно и няма да има автоматизирани тестове за него. За да го предадете просто поставете линк към Github (Bitbucket? Нещо друго?) репозитори, което да свалим. Ще гледаме дали сте ползвали адекватно version control системата. Уверете се, че ако клонираме репото и пуснем проекта всичко ще работи. За целта, много силно препоръчвам да използвате virtualenv за проекта си. Помислете дали базата ви и всичките ѝ таблици се създават коректно автоматично.