Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##
- # myapp.py
- #
- #!/usr/bin/env python
- from flask import Flask
- from flask_sqlalchemy import SQLAlchemy
- from flask_login import LoginManager
- from flask_migrate import Migrate
- from flask_admin import Admin
- from flask_admin.contrib.sqla import ModelView
- app = Flask(__name__)
- app.config.from_pyfile('config.py')
- # Login Manager Stuff
- login_manager = LoginManager()
- login_manager.init_app(app)
- # DB Stuff
- db = SQLAlchemy(app)
- migrate = Migrate(app, db)
- from views import *
- # Flask Admin Stuff
- import models
- admin = Admin(app, name='Ansible UI', template_mode='bootstrap3')
- admin.add_view(ModelView(models.User, db.session))
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port=8080)
- ##
- # models.py
- ##
- from flask_login import UserMixin
- from myapp import db
- from datetime import datetime
- class User(UserMixin, db.Model):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(40), unique=True, nullable=False)
- password = db.Column(db.String(80), nullable=False)
- email = db.Column(db.String(40), unique=True, nullable=False)
- date_created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
- is_active = db.Column(db.Boolean, default=True)
- def __init__(self, username, password, email, is_active):
- """user = User(username, password, email, is_active)"""
- self.username = username
- self.password = password
- self.email = email
- self.date_created = datetime.utcnow()
- self.is_active = is_active
- def __repr__(self):
- return '<User %r>' % self.username
- def as_dict(self):
- '''Returns User object's attributes in a list dictionary format so they can be converted into
- JSON. User's password is not included for obvious security reasons.'''
- return {c.name: getattr(self, c.name) for c in self.__table__.columns if c.name != 'password'}
- ##
- # views.py
- ##
- from myapp import app, login_manager
- from flask_login import login_required
- import flask
- from forms import InventoryForm, LoginForm
- from flask_login import login_user, logout_user
- from models import User
- @app.route('/login', methods=['POST', 'GET'])
- def login():
- form = LoginForm()
- if form.validate_on_submit():
- user = User.query.filter_by(email=form.email.data).first()
- if (user is not None) and form.password.data == user.password:
- login_user(user)
- flask.flash('Logged in successfully')
- return flask.redirect('/index')
- else:
- flask.flash('Incorrect email or password')
- return flask.render_template('login.html', form=form)
- @app.route("/logout")
- @login_required
- def logout():
- logout_user()
- return flask.redirect('login')
- @app.route('/')
- @app.route('/index')
- @app.route('/dashboard')
- @login_required
- def index():
- return flask.render_template('index.html')
- @app.errorhandler(404)
- def page_not_found(error):
- return flask.render_template("404.html"), 404
- @app.route('/inventories', methods=['GET', 'POST'])
- def inventories():
- form = InventoryForm()
- if form.validate_on_submit():
- return flask.redirect('/success')
- return flask.render_template('inventories.html', form=form)
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.filter(User.id == int(user_id)).first()
- ##
- # Start Traceback
- ##
- $ ./myapp.py
- Traceback (most recent call last):
- File "./myapp.py", line 24, in <module>
- admin = Admin(app, name='Ansible UI', template_mode='bootstrap3')
- File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask_admin/base.py", line 522, in __init__
- self._set_admin_index_view(index_view=index_view, endpoint=endpoint, url=url)
- File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask_admin/base.py", line 566, in _set_admin_index_view
- self.add_view(self.index_view)
- File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask_admin/base.py", line 540, in add_view
- self.app.register_blueprint(view.create_blueprint(self))
- File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask/app.py", line 64, in wrapper_func
- return f(self, *args, **kwargs)
- File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask/app.py", line 946, in register_blueprint
- (blueprint, self.blueprints[blueprint.name], blueprint.name)
- AssertionError: A blueprint's name collision occurred between <flask.blueprints.Blueprint object at 0x1047b5cf8> and <flask.blueprints.Blueprint object at 0x103587f98>. Both share the same name "admin". Blueprints that are created on the fly need unique names.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement