-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
67 lines (43 loc) · 1.62 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from flask import Flask
from config import Configuration
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_admin import AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin
from flask_security import SQLAlchemyUserDatastore
from flask_security import current_user
from flask_security import Security
from flask import redirect, url_for, request
app = Flask(__name__)
app.config.from_object(Configuration)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
### Admin ###
from models import *
class AdminMixin:
def is_accessible(self):
return current_user.has_role('admin')
def inaccessible_callbask(self,name, **kwargs):
return redirect(url_for('security.login', next = request.url))
class AdminView(AdminMixin, ModelView):
pass
class HomeAdminView(AdminMixin, AdminIndexView):
pass
class BaseModelView(ModelView):
def on_model_change(self, form, model, is_created):
model.generate_slug()
return super(BaseModelView, self).on_model_change(form, model, is_created)
class PostAdminView(AdminMixin, BaseModelView):
form_columns = ['title', 'body', 'tags']
class TagAdminView(AdminMixin, BaseModelView):
form_columns = ['name', 'posts']
admin = Admin(app, 'FlaskApp', url = '/', index_view = HomeAdminView(name = 'Home'))
admin.add_view(PostAdminView(Post, db.session))
admin.add_view(TagAdminView(Tag, db.session))
### Flask-secutity
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)