Skip to content

Commit 5525174

Browse files
author
App Generator
committed
Bump UI - Volt v1.4.1
1 parent 86ebe9a commit 5525174

File tree

452 files changed

+52184
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

452 files changed

+52184
-0
lines changed

app/__init__.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask import Flask, url_for
7+
from flask_login import LoginManager
8+
from flask_sqlalchemy import SQLAlchemy
9+
from importlib import import_module
10+
from logging import basicConfig, DEBUG, getLogger, StreamHandler
11+
from os import path
12+
13+
db = SQLAlchemy()
14+
login_manager = LoginManager()
15+
16+
def register_extensions(app):
17+
db.init_app(app)
18+
login_manager.init_app(app)
19+
20+
def register_blueprints(app):
21+
for module_name in ('base', 'home'):
22+
module = import_module('app.{}.routes'.format(module_name))
23+
app.register_blueprint(module.blueprint)
24+
25+
def configure_database(app):
26+
27+
@app.before_first_request
28+
def initialize_database():
29+
db.create_all()
30+
31+
@app.teardown_request
32+
def shutdown_session(exception=None):
33+
db.session.remove()
34+
35+
def create_app(config):
36+
app = Flask(__name__, static_folder='base/static')
37+
app.config.from_object(config)
38+
register_extensions(app)
39+
register_blueprints(app)
40+
configure_database(app)
41+
return app

app/base/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask import Blueprint
7+
8+
blueprint = Blueprint(
9+
'base_blueprint',
10+
__name__,
11+
url_prefix='',
12+
template_folder='templates',
13+
static_folder='static'
14+
)

app/base/forms.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask_wtf import FlaskForm
7+
from wtforms import TextField, PasswordField
8+
from wtforms.validators import InputRequired, Email, DataRequired
9+
10+
## login and registration
11+
12+
class LoginForm(FlaskForm):
13+
username = TextField ('Username', id='username_login' , validators=[DataRequired()])
14+
password = PasswordField('Password', id='pwd_login' , validators=[DataRequired()])
15+
16+
class CreateAccountForm(FlaskForm):
17+
username = TextField('Username' , id='username_create' , validators=[DataRequired()])
18+
email = TextField('Email' , id='email_create' , validators=[DataRequired(), Email()])
19+
password = PasswordField('Password' , id='pwd_create' , validators=[DataRequired()])

app/base/models.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask_login import UserMixin
7+
from sqlalchemy import Binary, Column, Integer, String
8+
9+
from app import db, login_manager
10+
11+
from app.base.util import hash_pass
12+
13+
class User(db.Model, UserMixin):
14+
15+
__tablename__ = 'User'
16+
17+
id = Column(Integer, primary_key=True)
18+
username = Column(String, unique=True)
19+
email = Column(String, unique=True)
20+
password = Column(Binary)
21+
22+
def __init__(self, **kwargs):
23+
for property, value in kwargs.items():
24+
# depending on whether value is an iterable or not, we must
25+
# unpack it's value (when **kwargs is request.form, some values
26+
# will be a 1-element list)
27+
if hasattr(value, '__iter__') and not isinstance(value, str):
28+
# the ,= unpack of a singleton fails PEP8 (travis flake8 test)
29+
value = value[0]
30+
31+
if property == 'password':
32+
value = hash_pass( value ) # we need bytes here (not plain str)
33+
34+
setattr(self, property, value)
35+
36+
def __repr__(self):
37+
return str(self.username)
38+
39+
40+
@login_manager.user_loader
41+
def user_loader(id):
42+
return User.query.filter_by(id=id).first()
43+
44+
@login_manager.request_loader
45+
def request_loader(request):
46+
username = request.form.get('username')
47+
user = User.query.filter_by(username=username).first()
48+
return user if user else None

app/base/routes.py

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask import jsonify, render_template, redirect, request, url_for
7+
from flask_login import (
8+
current_user,
9+
login_required,
10+
login_user,
11+
logout_user
12+
)
13+
14+
from app import db, login_manager
15+
from app.base import blueprint
16+
from app.base.forms import LoginForm, CreateAccountForm
17+
from app.base.models import User
18+
19+
from app.base.util import verify_pass
20+
21+
@blueprint.route('/')
22+
def route_default():
23+
return redirect(url_for('base_blueprint.login'))
24+
25+
## Login & Registration
26+
27+
@blueprint.route('/login', methods=['GET', 'POST'])
28+
def login():
29+
login_form = LoginForm(request.form)
30+
if 'login' in request.form:
31+
32+
# read form data
33+
username = request.form['username']
34+
password = request.form['password']
35+
36+
# Locate user
37+
user = User.query.filter_by(username=username).first()
38+
39+
# Check the password
40+
if user and verify_pass( password, user.password):
41+
42+
login_user(user)
43+
return redirect(url_for('base_blueprint.route_default'))
44+
45+
# Something (user or pass) is not ok
46+
return render_template( 'accounts/login.html', msg='Wrong user or password', form=login_form)
47+
48+
if not current_user.is_authenticated:
49+
return render_template( 'accounts/login.html',
50+
form=login_form)
51+
return redirect(url_for('home_blueprint.index'))
52+
53+
@blueprint.route('/register', methods=['GET', 'POST'])
54+
def register():
55+
login_form = LoginForm(request.form)
56+
create_account_form = CreateAccountForm(request.form)
57+
if 'register' in request.form:
58+
59+
username = request.form['username']
60+
email = request.form['email' ]
61+
62+
# Check usename exists
63+
user = User.query.filter_by(username=username).first()
64+
if user:
65+
return render_template( 'accounts/register.html',
66+
msg='Username already registered',
67+
success=False,
68+
form=create_account_form)
69+
70+
# Check email exists
71+
user = User.query.filter_by(email=email).first()
72+
if user:
73+
return render_template( 'accounts/register.html',
74+
msg='Email already registered',
75+
success=False,
76+
form=create_account_form)
77+
78+
# else we can create the user
79+
user = User(**request.form)
80+
db.session.add(user)
81+
db.session.commit()
82+
83+
return render_template( 'accounts/register.html',
84+
msg='User created please <a href="/login">login</a>',
85+
success=True,
86+
form=create_account_form)
87+
88+
else:
89+
return render_template( 'accounts/register.html', form=create_account_form)
90+
91+
@blueprint.route('/logout')
92+
def logout():
93+
logout_user()
94+
return redirect(url_for('base_blueprint.login'))
95+
96+
## Errors
97+
98+
@login_manager.unauthorized_handler
99+
def unauthorized_handler():
100+
return render_template('page-403.html'), 403
101+
102+
@blueprint.errorhandler(403)
103+
def access_forbidden(error):
104+
return render_template('page-403.html'), 403
105+
106+
@blueprint.errorhandler(404)
107+
def not_found_error(error):
108+
return render_template('page-404.html'), 404
109+
110+
@blueprint.errorhandler(500)
111+
def internal_error(error):
112+
return render_template('page-500.html'), 500

0 commit comments

Comments
 (0)