https://github.com/sarartur/flask-account-starter
flexible and extensible Flask boilerplate template
https://github.com/sarartur/flask-account-starter
authlib boilerplate boilerplate-application flask flask-bcrypt flask-login flask-mail flask-sqlalchemy
Last synced: 4 months ago
JSON representation
flexible and extensible Flask boilerplate template
- Host: GitHub
- URL: https://github.com/sarartur/flask-account-starter
- Owner: sarartur
- License: mit
- Created: 2022-05-25T20:53:32.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-01T23:30:46.000Z (about 4 years ago)
- Last Synced: 2025-09-11T03:10:48.079Z (9 months ago)
- Topics: authlib, boilerplate, boilerplate-application, flask, flask-bcrypt, flask-login, flask-mail, flask-sqlalchemy
- Language: Python
- Homepage:
- Size: 397 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- License: LICENSE.txt
Awesome Lists containing this project
README
# Flask-Account-Starter

Flask-Account-Starter is a flexible and extensible Flask boilerplate template that contains essential functions required of an application with user accounts.
### Features
The application comes out of the box with the following features:
- Account Creation
- Account Verification (enabled / disabled)
- New Login IP detection / verification
- Block after `x` Login Attempts
- Password Reset
- User Activity Log
- Automated Emails
- Slick [Bootstrap 5](https://getbootstrap.com/docs/5.0/getting-started/introduction/) and [FontAwesome 6](https://fontawesome.com/) responsive templates.
- Custom CLI extensions for user management
To achieve this functionality the application leverages the following popular extensions and packages:
- Flask-Login
- Flask-Bcrypt
- Flask-SQLAlchemy
- Flask-Migrate
- flask-Mail
- authlib
The code is written using the application factory pattern and is neat and extensible. The project contains some responsive templates and pages styled with [Bootstrap 5](https://getbootstrap.com/docs/5.0/getting-started/introduction/)
written using Jinja2 and HTML best practices.
### Getting Started
The application requires `python3.8` or higher.
```
git clone https://github.com/sarartur/flask-account-starter
```
```
pip install -r requirements.txt
```
The configuration is set through **environment variables**. The configuration file contains defaults which should be overwritten accordingly. Start by exporting the application it self:
```
export FLASK_APP='app.wsgi'
```
Additionally you may want to right away configure the database and the environment:
```
export FLASK_ENV='development'
export SQLALCHEMY_DATABASE_URI='postgresql://postgres:123@localhost:5432/app'
```
Run the migrations using `Flask-Migrate`:
```
flask db init
flask db migrate
flask db upgrade
```
At this point the application should be good to launch in development mode with:
```
flask run
```
### Next Steps
To enable email verification and password verification functionality you will need to connect an email account to ```Flask-Mail``` (see [documentation](https://pythonhosted.org/Flask-Mail/)) and also create an generate an ```JWT RS256``` key pair:
```
ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key
openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub
```
and export variables pointing to the files and set `ACCOUNT_VERIFICATION` to `True`:
```
export JWT_PRIVATE_KEY='/path/to/jwtRS256.key'
export JWT_PUBLIC_KEY='/path/to/public/jwtRS256.key.pub'
export ACCOUNT_VERIFICATION='True'
```
The application also supports new IP login verification and account block due to unsuccessful attempts.
```
export LOGIN_MAX_RETIRES=4
export LOGIN_NEW_IP_VERIFY='True'
```
At this point all of the apps functionality is activated. You can continue building on top of the code using the general principles of `Flask` factory patter design.
### Layout
```
app
├── __init__.py #Application factory.
├── auth
│ ├── forms.py #Login, Register and Password Reset forms.
│ ├── __init__.py #Authentication Blueprint, login_required func.
│ ├── routes.py #Login, logout, register, etc. routes.
| ├── handlers.py #Handlers for authentication logic.
│ ├── templates #Auth templates for routes above.
│ │ └── auth
│ │ ├── _header.html
│ │ ├── login.html
│ │ ├── password_reset.html
│ │ ├── password_reset_request.html
│ │ └── register.html
│ └── utils.py
├── config.py #Configuration File. See README.MD.
├── core
│ ├── __init__.py #Core Blueprint.
│ ├── models.py #BaseMixin class.
│ ├── routes.py #Home route.
│ └── templates
│ └── core
│ ├── components #Components for `include` with Jinja.
│ │ ├── inputs
│ │ │ ├── _field_errs.html
│ │ │ └── floating_label.html
│ │ └── pagination.html
│ └── layout.html #Application layout.
├── email
│ ├── __init__.py #Email Blueprint and send func.
│ └── templates
│ └── email #Email templates.
| ├── login_verification.html
│ ├── account_verification.html
│ └── password_reset.html
├── extensions #Application extensions
│ ├── bcrypt.py #Flask-Bcrypt
│ ├── database.py #Flask-SQLAlchemy, Flask-Migrate
│ ├── flask_login.py #Flask-Login
│ ├── flask_mail.py #Flask-Mail
│ └── __init__.py
├── static
│ ├── css
│ │ └── main.css
│ └── images
│ ├── logo_full.png
│ └── logo.png
├── user
│ ├── cli.py #Cli for user model: add user, get passwd reset link.
│ ├── enums.py #UserAccountLog action types and Block reasons types.
│ ├── forms.py #Verification email request form.
│ ├── __init__.py #User Blueprint.
│ ├── models.py #UserAccount and UserAccountLog models.
│ ├── routes.py #User profile routes.
│ └── templates #User templates.
│ └── user
│ ├── _header.html
│ ├── profile.html
│ └── profile_not_verified.html
└── wsgi
└── __init__.py #Application instance.
```
### Contact
- Email me at sarartur.ruk@gmail.com or open a new [Issue](https://github.com/sarartur/flask-account-starter) on Github.