From 1cc15385adcb0992ae2575835082c6d9c59ad74a Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Wed, 10 May 2017 19:12:37 +0200 Subject: [PATCH] Update README --- README.md | 24 ++++++++++++++++++++++++ requirements.txt | 2 -- screenshots/alls.jpg | Bin 0 -> 224727 bytes screenshots/delete.jpg | Bin 0 -> 34441 bytes screenshots/edit.jpt | Bin 0 -> 108805 bytes screenshots/message.jpg | Bin 0 -> 150377 bytes screenshots/new.jpg | Bin 0 -> 80752 bytes screenshots/search.jpg | Bin 0 -> 80320 bytes 8 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 screenshots/alls.jpg create mode 100644 screenshots/delete.jpg create mode 100644 screenshots/edit.jpt create mode 100644 screenshots/message.jpg create mode 100644 screenshots/new.jpg create mode 100644 screenshots/search.jpg diff --git a/README.md b/README.md new file mode 100644 index 0000000..c90f9cc --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Flask contacts + +[DEMO](http://flask-contacts.programadorwebvalencia.com) + +## Use + +* Flask (Obvious!) +* Flask-SQLAlchemy (ORM for database) +* Flask-WTF (Generation of forms and validations) +* Faker (Generates fake data) + +## Install + +```bash +pip install -r requirements.txt +python3 migrations.py +``` +## Run + +```bash +python3 app.py +``` + +## Screenshots diff --git a/requirements.txt b/requirements.txt index 596648e..1c68177 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,5 +2,3 @@ Faker==0.7.11 Flask==0.12.1 Flask-SQLAlchemy==2.2 Flask-WTF==0.14.2 -SQLAlchemy==1.1.9 -WTForms==2.1 diff --git a/screenshots/alls.jpg b/screenshots/alls.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8295ef6a89ba7f749f5b46cf80002a0e8451c99b GIT binary patch literal 224727 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