admin.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: admin.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-31 21:42:11 (CST)
  9. # Last Update:星期日 2016-7-24 20:2:3 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from maple import db, app
  14. from maple.forums.models import Board, Count, Notice
  15. from maple.tag.models import Tags
  16. from maple.user.models import Role
  17. from maple.permission.models import Permiss, Route
  18. from flask import abort
  19. from flask_admin import Admin
  20. from flask_admin.contrib.sqla import ModelView
  21. from flask_admin.form import SecureForm
  22. from flask_wtf import Form
  23. from flask_principal import Permission, RoleNeed
  24. admin = Admin(app, name='HonMaple', template_mode='bootstrap3')
  25. class BaseModelView(ModelView):
  26. session = db.session
  27. page_size = 10
  28. can_view_details = True
  29. form_base_class = Form
  30. # form_base_class = SecureForm
  31. def is_accessible(self):
  32. permission = Permission(RoleNeed('super'))
  33. return permission.can()
  34. def inaccessible_callback(self, name, **kwargs):
  35. abort(404)
  36. class BoardModelView(BaseModelView):
  37. column_list = ['parent_board', 'board', 'description', 'rank',
  38. 'count.topics', 'count.all_topics']
  39. column_labels = {'count.topics': '主题', 'count.all_topics': '所有主题'}
  40. form_excluded_columns = ('topics')
  41. class CountModelView(BaseModelView):
  42. column_list = ['board', 'topics', 'all_topics', 'drafts', 'collects',
  43. 'inviteds', 'follows']
  44. inline_models = [(Board, dict(form_excluded_columns=['topics']))]
  45. class PermissView(BaseModelView):
  46. column_display_pk = True
  47. column_list = ['id', 'name', 'roles', 'method', 'routes', 'is_allow']
  48. column_editable_list = ['is_allow', 'method']
  49. form_choices = {'method': [('GET', 'GET'), ('POST', 'POST'),
  50. ('PUT', 'PUT'), ('DELETE', 'DELETE')]}
  51. class RoleView(BaseModelView):
  52. column_display_pk = True
  53. column_list = ['id', 'name', 'permissions', 'parents', 'children']
  54. def get_list():
  55. endpoints = []
  56. for rule in app.url_map.iter_rules():
  57. endpoints.append((rule.endpoint, rule.endpoint))
  58. return endpoints
  59. class RouteView(BaseModelView):
  60. column_display_pk = True
  61. column_list = ['id', 'permissions', 'endpoint', 'rule']
  62. form_choices = {'endpoint': get_list()}
  63. class TagsModelView(BaseModelView):
  64. column_searchable_list = ['tagname']
  65. column_list = ['tagname', 'parents', 'children', 'summary', 'time']
  66. form_excluded_columns = ('tags', 'users', 'topics', 'followers')
  67. class NoticeView(BaseModelView):
  68. column_filters = ['category', 'rece_user.username', 'send_user.username',
  69. 'is_read', 'publish']
  70. column_searchable_list = ['content']
  71. column_editable_list = ['is_read']
  72. form_widget_args = {'content': {'rows': 10}}
  73. admin.add_view(BoardModelView(Board,
  74. db.session,
  75. name='管理版块',
  76. endpoint='admin_boards',
  77. category='管理论坛'))
  78. admin.add_view(CountModelView(Count,
  79. db.session,
  80. name='管理统计',
  81. endpoint='admin_counts',
  82. category='管理论坛'))
  83. admin.add_view(TagsModelView(Tags,
  84. db.session,
  85. name='管理节点',
  86. endpoint='admin_tags',
  87. category='管理论坛'))
  88. admin.add_view(RoleView(Role,
  89. db.session,
  90. name='管理用户组',
  91. endpoint='admin_role_permission',
  92. category='权限管理'))
  93. admin.add_view(PermissView(Permiss,
  94. db.session,
  95. name='管理权限',
  96. endpoint='admin_permiss',
  97. category='权限管理'))
  98. admin.add_view(RouteView(Route,
  99. db.session,
  100. name='管理视图',
  101. endpoint='admin_route',
  102. category='权限管理'))
  103. admin.add_view(NoticeView(
  104. Notice, db.session,
  105. name='管理通知', endpoint='admin_notice'))
  106. from .admin_user import admin_user
  107. from .admin_topic import admin_topic
  108. from .admin_follow import admin_follow
  109. # from .admin_file import admin_file
  110. admin_user(admin)
  111. admin_topic(admin)
  112. admin_follow(admin)
  113. # admin_file(admin)