Flask-Boost
===========
.. image:: http://img.shields.io/pypi/v/flask-turbo-boost.svg
:target: https://pypi.python.org/pypi/flask-turbo-boost
:alt: Latest Version
.. image:: http://img.shields.io/pypi/dm/flask-turbo-boost.svg
:target: https://pypi.python.org/pypi/flask-turbo-boost
:alt: Downloads Per Month
.. image:: http://img.shields.io/pypi/pyversions/flask-turbo-boost.svg
:target: https://pypi.python.org/pypi/flask-turbo-boost
:alt: Python Versions
.. image:: http://img.shields.io/badge/license-MIT-blue.svg
:target: https://github.com/hustlzp/Flask-Boost/blob/master/LICENSE
:alt: The MIT License
Flask application generator for boosting your development.
Features
--------
* **Well Defined Project Structure**
* Use factory pattern to generate Flask app.
* Use Blueprints to organize controllers.
* Split controllers, models, forms, utilities, assets, Jinja2 pages, Jinja2 macros into different directories.
* Organize Jinja2 page assets (HTML, JavaScript, CSS) to the same directory.
* Organize Jinja2 macro assets (HTML, JavaScript, CSS) to the same directory.
* API-Only Project Structure
* **Batteries Included**
* Use Flask-SQLAlchemy and Flask-Migrate as database tools.
* Use Searchable-Mixin for search every Models [Optional]
* Use ActiveRecord-Like-Mixin for search every Models [Optional]
* Use JWTAuth for authentication [Optional]
* Use JsonSchema for validate incoming requests [Optional]
* Use Flask-WTF to validate forms.
* Use Flask-Security for user management.
* Use Flask-Dance for social user authentication (Sample with facebook and google).
* Use Bulma as frontend framework.
* Dockerfile – Sample dockerfile for development
* docker-compose.yml – Sample docker-compose for deployment
* Use Gunicorn to run Flask app and Supervisor to manage Gunicorn processes.
* Use Fabric as deployment tool.
* Use Sentry to log exceptions.
* Use Nginx to serve static files.
* Use sub script command to generate admin and form from a model.
* **Scaffold Commands**
* Generate project files: ``turbo new <project>``
* Generate API-only project files: ``turbo new --api <project>``
* Generate controller files: ``turbo new controller <controller>``
* Generate action files: ``turbo new action <controller> <action> [-t]``
* Generate form files: ``turbo new form <form>``
* Generate model files: ``turbo new model <model>``
* Generate macro files: ``turbo new macro <category> <macro>`` or ``boost new macro <macro>``
Installation
------------
::
pip install flask-turbo-boost
Development Guide
-----------------
Init project
~~~~~~~~~~~~
::
turbo new <your_project_name>
Setup backend requirements
~~~~~~~~~~~~~~~~~~~~~~~~~~
::
cd <your_project_dir>
virtualenv venv
. venv/bin/activate (venv\Scripts\activate in Windows)
pip install -r requirements.txt
**Note**: if you failed in ``pip install -r requirements.txt`` in Windows, try to install package binaries directly:
* pycrpyto: try to follow this article compiling-pycrypto-on-win7-64_, or get the complied pycrypyto library directly: archive_pycrpyto_library_.
.. _compiling-pycrypto-on-win7-64: https://yorickdowne.wordpress.com/2010/12/22/compiling-pycrypto-on-win7-64/
.. _archive_pycrpyto_library: http://archive.warshaft.com/pycrypto-2.3.1.win7x64-py2.7x64.7z
Init database
~~~~~~~~~~~~~
Create database with name ``your_project_name`` and encoding ``utf8``.
Update ``SQLALCHEMY_DATABASE_URI`` in ``config/development.py`` as needed.
Then init tables::
flask db upgrade
Run app
~~~~~~~
Run local server::
flask run
Scaffold commands
~~~~~~~~~~~~~~~~~
::
turbo new <project>
turbo new --api <project>
turbo new controller <controller>
turbo new action <controller> <action> [-t]
turbo new form <form>
turbo new model <model>
turbo new macro <category> <macro>
turbo new macro <macro>
turbo -v
turbo -h
First Production Deploy
-----------------------
Config server
~~~~~~~~~~~~~
Install mysql-server, python-virtualenv, git, supervisor, nginx, g++, python-dev, libmysqlclient-dev, libxml2-dev, libxslt-dev on your server.
Install requirements
~~~~~~~~~~~~~~~~~~~~
::
git clone **.git
cd <your_project_dir>
virtualenv venv
. venv/bin/activate
pip install -r requirements.txt
Config app
~~~~~~~~~~
Save ``config/production_sample.py`` as ``config/production.py``, update configs in ``config/production.py`` as needed and transfer it to server.
**Note**: remember to update ``SECRET_KEY`` in ``config/production.py``! You can generate random secret key as follows::
>>> import os
>>> os.urandom(24)
Init database
~~~~~~~~~~~~~
Create database with name ``your_project_name`` and encoding ``utf8``.
And run::
export MODE=PRODUCTION
flask db upgrade
Copy config files
~~~~~~~~~~~~~~~~~
Update project root path as needed in ``deploy/nginx.conf`` and ``deploy/supervisor.conf``.
::
cp deploy/flask_env.sh /etc/profile.d/
cp deploy/nginx.conf /etc/nginx/conf.d/<your_project_name>.conf
cp deploy/supervisor.conf /etc/supervisor/conf.d/<your_project_name>.conf
Start app
~~~~~~~~~
::
service nginx restart
service supervisor restart
Daily Production Deploy
-----------------------
Update ``HOST_STRING`` in config with the format ``user@ip``.
Commit your codes and run::
git push && fab deploy
P.S. If you wanna to deploy flask with Apache2, see this_ post.
.. _this: https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension
License
-------
MIT