views.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-20 13:18:19 (CST)
  9. # Last Update:星期五 2016-7-15 19:3:47 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (Blueprint, render_template, g, request, abort, redirect,
  14. flash, url_for, current_app)
  15. from flask_login import current_user, login_required
  16. from flask_maple.forms import flash_errors
  17. from maple.helpers import is_num
  18. from maple.user.models import User
  19. from maple.forums.models import Notice, Board
  20. from maple.topic.models import Topic
  21. from .forms import MessageForm
  22. from maple import cache, db
  23. # site = Blueprint('forums', __name__)
  24. # @site.route('/', methods=['GET'])
  25. @cache.cached(timeout=60)
  26. def index():
  27. topics = Topic.query.filter_by(is_good=True, is_top=False).paginate(1, 10)
  28. top_topics = Topic.query.filter_by(is_top=True).limit(5).all()
  29. if not topics.items:
  30. topics = Topic.query.paginate(1, 10)
  31. data = {'title': '', 'topics': topics, 'top_topics': top_topics}
  32. return render_template('forums/index.html', **data)
  33. # @site.route('/index')
  34. @cache.cached(timeout=60)
  35. def forums():
  36. boards = {}
  37. parent_boards = db.session.query(Board.parent_board).group_by(
  38. Board.parent_board)
  39. for parent_board in parent_boards:
  40. child_board = Board.query.filter_by(parent_board=parent_board).all()
  41. boards[parent_board[0]] = child_board
  42. data = {'title': '首页 - ', 'boards': boards}
  43. return render_template('forums/forums.html', **data)
  44. # @site.route('/notices')
  45. @login_required
  46. def notice():
  47. page = is_num(request.args.get('page'))
  48. notices = Notice.query.filter_by(
  49. rece_id=current_user.id).order_by(Notice.publish.desc()).paginate(
  50. page,
  51. current_app.config['PER_PAGE'],
  52. error_out=True)
  53. unread_notices = Notice.query.filter_by(rece_id=current_user.id,
  54. is_read=False).all()
  55. if unread_notices:
  56. for notice in unread_notices:
  57. notice.is_read = True
  58. db.session.commit()
  59. data = {'title': '消息提醒 - ', 'notices': notices}
  60. return render_template('forums/notice.html', **data)
  61. # @site.route('/userlist')
  62. @login_required
  63. def userlist():
  64. page = is_num(request.args.get('page'))
  65. users = User.query.paginate(page,
  66. current_app.config['PER_PAGE'],
  67. error_out=True)
  68. data = {'title': '用户列表 - ', 'users': users}
  69. return render_template('forums/userlist.html', **data)
  70. # @site.route('/messages/<int:receId>', methods=['POST'])
  71. @login_required
  72. def message(receId):
  73. form = MessageForm()
  74. rece_user = User.query.filter_by(id=receId).first_or_404()
  75. if form.validate_on_submit() and request.method == "POST":
  76. message = Notice()
  77. message.category = 'privacy'
  78. message.content = {'content': form.message.data}
  79. message.rece_user = rece_user
  80. message.send_id = current_user.id
  81. db.session.add(message)
  82. db.session.commit()
  83. flash('成功发送', category='success')
  84. return redirect(url_for('user.user', user_url=rece_user.username))
  85. else:
  86. if form.errors:
  87. flash_errors(form)
  88. return redirect(url_for('user.user', user_url=rece_user.username))
  89. # @site.route('/about')
  90. @cache.cached(timeout=60)
  91. def about():
  92. data = {'title': '关于 - '}
  93. return render_template('forums/about.html', **data)
  94. # @site.route('/help')
  95. @cache.cached(timeout=60)
  96. def help():
  97. data = {'title': '帮助 - '}
  98. return render_template('forums/help.html', **data)
  99. # @site.route('/order', methods=['POST'])
  100. def order():
  101. from maple.main.orderby import form_judge
  102. form = g.sort_form
  103. if form.validate_on_submit():
  104. topics = form_judge(form)
  105. data = {'topics': topics}
  106. return render_template('base/sort.html', **data)
  107. else:
  108. abort(404)