admin.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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-30 13:7:51 (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_wtf import Form
  22. from flask_principal import Permission, RoleNeed
  23. admin = Admin(app,
  24. url=app.config.get('ADMIN_URL', '/admin'),
  25. name='HonMaple',
  26. template_mode='bootstrap3')
  27. class BaseForm(Form):
  28. def __init__(self, formdata=None, obj=None, prefix=u'', **kwargs):
  29. self._obj = obj
  30. super(BaseForm, self).__init__(formdata=formdata,
  31. obj=obj,
  32. prefix=prefix,
  33. **kwargs)
  34. class BaseModelView(ModelView):
  35. session = db.session
  36. page_size = 10
  37. can_view_details = True
  38. form_base_class = BaseForm
  39. def is_accessible(self):
  40. permission = Permission(RoleNeed('super'))
  41. return permission.can()
  42. def inaccessible_callback(self, name, **kwargs):
  43. abort(404)
  44. class BoardModelView(BaseModelView):
  45. column_list = ['parent_board', 'board', 'description', 'rank',
  46. 'count.topics', 'count.all_topics']
  47. column_labels = {'count.topics': '主题', 'count.all_topics': '所有主题'}
  48. form_excluded_columns = ('topics')
  49. class CountModelView(BaseModelView):
  50. column_list = ['board', 'topics', 'all_topics', 'drafts', 'collects',
  51. 'inviteds', 'follows']
  52. inline_models = [(Board, dict(form_excluded_columns=['topics']))]
  53. class PermissView(BaseModelView):
  54. column_display_pk = True
  55. column_list = ['id', 'name', 'roles', 'method', 'routes', 'is_allow']
  56. column_editable_list = ['is_allow', 'method']
  57. form_choices = {'method': [('GET', 'GET'), ('POST', 'POST'),
  58. ('PUT', 'PUT'), ('DELETE', 'DELETE')]}
  59. class RoleView(BaseModelView):
  60. column_display_pk = True
  61. column_list = ['id', 'name', 'permissions', 'parents', 'children']
  62. def get_list():
  63. endpoints = []
  64. for rule in app.url_map.iter_rules():
  65. endpoints.append((rule.endpoint, rule.endpoint))
  66. return endpoints
  67. class RouteView(BaseModelView):
  68. column_display_pk = True
  69. column_list = ['id', 'permissions', 'endpoint', 'rule']
  70. form_choices = {'endpoint': get_list()}
  71. class TagsModelView(BaseModelView):
  72. column_searchable_list = ['tagname']
  73. column_list = ['tagname', 'parents', 'children', 'summary', 'time']
  74. form_excluded_columns = ('tags', 'users', 'topics', 'followers')
  75. class NoticeView(BaseModelView):
  76. column_filters = ['category', 'rece_user.username', 'send_user.username',
  77. 'is_read', 'publish']
  78. column_searchable_list = ['content']
  79. column_editable_list = ['is_read']
  80. form_widget_args = {'content': {'rows': 10}}
  81. admin.add_view(BoardModelView(Board,
  82. db.session,
  83. name='管理版块',
  84. endpoint='admin_boards',
  85. category='管理论坛'))
  86. admin.add_view(CountModelView(Count,
  87. db.session,
  88. name='管理统计',
  89. endpoint='admin_counts',
  90. category='管理论坛'))
  91. admin.add_view(TagsModelView(Tags,
  92. db.session,
  93. name='管理节点',
  94. endpoint='admin_tags',
  95. category='管理论坛'))
  96. admin.add_view(RoleView(Role,
  97. db.session,
  98. name='管理用户组',
  99. endpoint='admin_role_permission',
  100. category='权限管理'))
  101. admin.add_view(PermissView(Permiss,
  102. db.session,
  103. name='管理权限',
  104. endpoint='admin_permiss',
  105. category='权限管理'))
  106. admin.add_view(RouteView(Route,
  107. db.session,
  108. name='管理视图',
  109. endpoint='admin_route',
  110. category='权限管理'))
  111. admin.add_view(NoticeView(
  112. Notice, db.session,
  113. name='管理通知', endpoint='admin_notice'))
  114. from .admin_user import admin_user
  115. from .admin_topic import admin_topic
  116. from .admin_follow import admin_follow
  117. # from .admin_file import admin_file
  118. admin_user(admin)
  119. admin_topic(admin)
  120. admin_follow(admin)
  121. # admin_file(admin)