This a protype of a StartUp named Doctor X. Which is a website developed on flask uses deep neural network for analyzing an X-Rays.
- User account sign up, sign in, password reset, all through asynchronous email confirmation.
- Form generation.
- Error handling.
- HTML macros and layout file.
- "Functional" file structure.
- Python 3.x compliant.
- Asynchronous AJAX calls.
- Administration panel.
- Logging.
- Flask, obviously.
- Flask-Login for the user accounts.
- Flask-SQLAlchemy interacting with the database.
- Flask-WTF and WTForms for the form handling.
- Flask-Mail for sending mails.
- itsdangerous for generating random tokens for the confirmation emails.
- Flask-Bcrypt for generating secret user passwords.
- Flask-Admin for building an administration interface.
- Flask-Script for managing the app.
- structlog for logging.
- Flask-DebugToolBar for adding a performance toolbar in development.
- gunicorn for acting as a reverse-proxy for Nginx.
- Semantic UI for the global style. Very similar to Bootstrap.
I did what most people recommend for the application's structure. Basically, everything is contained in the app/
folder.
- There you have the classic
static/
andtemplates/
folders. Thetemplates/
folder contains macros, error views and a common layout. - I added a
views/
folder to separate the user and the website logic, which could be extended to the the admin views. - The same goes for the
forms/
folder, as the project grows it will be useful to split the WTForms code into separate files. - The
models.py
script contains the SQLAlchemy code, for the while it only contains the logic for ausers
table. - The
toolbox/
folder is a personal choice, in it I keep all the other code the application will need. - Management commands should be included in
manage.py
. Enterpython manage.py -?
to get a list of existing commands. - I added a Makefile for setup tasks, it can be quite useful once a project grows.
-
Install the requirements and setup the development environment.
make install && make dev
-
Create the database.
python3 manage.py initdb
-
Run the application.
python3 manage.py runserver
-
Navigate to
localhost:5000
.
The goal is to keep most of the application's configuration in a single file called config.py
. I added a config_dev.py
and a config_prod.py
who inherit from config_common.py
. The trick is to symlink either of these to config.py
. This is done in by running make dev
or make prod
.