Advertisement
quantim

flask-admin fail

Oct 11th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.73 KB | None | 0 0
  1. ##
  2. # myapp.py
  3. #
  4.  
  5. #!/usr/bin/env python
  6. from flask import Flask
  7. from flask_sqlalchemy import SQLAlchemy
  8. from flask_login import LoginManager
  9. from flask_migrate import Migrate
  10. from flask_admin import Admin
  11. from flask_admin.contrib.sqla import ModelView
  12.  
  13. app = Flask(__name__)
  14. app.config.from_pyfile('config.py')
  15.  
  16. # Login Manager Stuff
  17. login_manager = LoginManager()
  18. login_manager.init_app(app)
  19.  
  20. # DB Stuff
  21. db = SQLAlchemy(app)
  22. migrate = Migrate(app, db)
  23.  
  24. from views import *
  25.  
  26. # Flask Admin Stuff
  27. import models
  28. admin = Admin(app, name='Ansible UI', template_mode='bootstrap3')
  29. admin.add_view(ModelView(models.User, db.session))
  30.  
  31. if __name__ == '__main__':
  32.     app.run(host='0.0.0.0', port=8080)
  33.  
  34.  
  35. ##
  36. # models.py
  37. ##
  38.  
  39. from flask_login import UserMixin
  40. from myapp import db
  41. from datetime import datetime
  42.  
  43. class User(UserMixin, db.Model):
  44.     id = db.Column(db.Integer, primary_key=True)
  45.     username = db.Column(db.String(40), unique=True, nullable=False)
  46.     password = db.Column(db.String(80), nullable=False)
  47.     email = db.Column(db.String(40), unique=True, nullable=False)
  48.     date_created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
  49.     is_active = db.Column(db.Boolean, default=True)
  50.  
  51.     def __init__(self, username, password, email, is_active):
  52.         """user = User(username, password, email, is_active)"""
  53.         self.username = username
  54.         self.password = password
  55.         self.email = email
  56.         self.date_created = datetime.utcnow()
  57.         self.is_active = is_active
  58.  
  59.     def __repr__(self):
  60.         return '<User %r>' % self.username
  61.  
  62.     def as_dict(self):
  63.         '''Returns User object's attributes in a list dictionary format so they can be converted into
  64.        JSON. User's password is not included for obvious security reasons.'''
  65.         return {c.name: getattr(self, c.name) for c in self.__table__.columns if c.name != 'password'}
  66.  
  67. ##
  68. # views.py
  69. ##
  70.  
  71. from myapp import app, login_manager
  72. from flask_login import login_required
  73. import flask
  74. from forms import InventoryForm, LoginForm
  75. from flask_login import login_user, logout_user
  76. from models import User
  77.  
  78. @app.route('/login', methods=['POST', 'GET'])
  79. def login():
  80.     form = LoginForm()
  81.     if form.validate_on_submit():
  82.         user = User.query.filter_by(email=form.email.data).first()
  83.         if (user is not None) and form.password.data == user.password:
  84.             login_user(user)
  85.             flask.flash('Logged in successfully')
  86.             return flask.redirect('/index')
  87.         else:
  88.             flask.flash('Incorrect email or password')
  89.     return flask.render_template('login.html', form=form)
  90.  
  91.  
  92. @app.route("/logout")
  93. @login_required
  94. def logout():
  95.     logout_user()
  96.     return flask.redirect('login')
  97.  
  98.  
  99. @app.route('/')
  100. @app.route('/index')
  101. @app.route('/dashboard')
  102. @login_required
  103. def index():
  104.     return flask.render_template('index.html')
  105.  
  106. @app.errorhandler(404)
  107. def page_not_found(error):
  108.     return flask.render_template("404.html"), 404
  109.  
  110. @app.route('/inventories', methods=['GET', 'POST'])
  111. def inventories():
  112.     form = InventoryForm()
  113.     if form.validate_on_submit():
  114.         return flask.redirect('/success')
  115.     return flask.render_template('inventories.html', form=form)
  116.  
  117. @login_manager.user_loader
  118. def load_user(user_id):
  119.     return User.query.filter(User.id == int(user_id)).first()
  120.  
  121.  
  122. ##
  123. # Start Traceback
  124. ##
  125.  
  126. $ ./myapp.py
  127. Traceback (most recent call last):
  128.   File "./myapp.py", line 24, in <module>
  129.     admin = Admin(app, name='Ansible UI', template_mode='bootstrap3')
  130.   File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask_admin/base.py", line 522, in __init__
  131.     self._set_admin_index_view(index_view=index_view, endpoint=endpoint, url=url)
  132.   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
  133.     self.add_view(self.index_view)
  134.   File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask_admin/base.py", line 540, in add_view
  135.     self.app.register_blueprint(view.create_blueprint(self))
  136.   File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask/app.py", line 64, in wrapper_func
  137.     return f(self, *args, **kwargs)
  138.   File "/Users/timothy/Desktop/code/Flask/Ansible_UI/venv/lib/python3.5/site-packages/flask/app.py", line 946, in register_blueprint
  139.     (blueprint, self.blueprints[blueprint.name], blueprint.name)
  140. 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