views.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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-4 17:21:15 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (Blueprint, render_template, g, request, abort, redirect,
  14. flash, url_for)
  15. from flask_login import current_user, login_required
  16. from flask_maple.forms import flash_errors
  17. from maple import app, db, cache
  18. from maple.helpers import is_num
  19. from maple.user.models import User
  20. from maple.forums.models import Notice, Board
  21. from maple.topic.models import Topic
  22. from .forms import MessageForm
  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': '',
  32. 'topics': topics,
  33. 'top_topics': top_topics}
  34. return render_template('forums/index.html', **data)
  35. @site.route('/index')
  36. @cache.cached(timeout=60)
  37. def forums():
  38. boards = {}
  39. parent_boards = db.session.query(Board.parent_board).group_by(
  40. Board.parent_board)
  41. for parent_board in parent_boards:
  42. child_board = Board.query.filter_by(parent_board=parent_board).all()
  43. boards[parent_board[0]] = child_board
  44. data = {'title': '首页 - ', 'boards': boards}
  45. return render_template('forums/forums.html', **data)
  46. @site.route('/notices')
  47. @login_required
  48. def notice():
  49. page = is_num(request.args.get('page'))
  50. notices = Notice.query.filter_by(
  51. rece_id=current_user.id).order_by(Notice.publish.desc()).paginate(
  52. page, app.config['PER_PAGE'],
  53. error_out=True)
  54. data = {'title': '消息提醒 - ', 'notices': notices}
  55. return render_template('forums/notice.html', **data)
  56. @site.route('/userlist')
  57. @login_required
  58. def userlist():
  59. page = is_num(request.args.get('page'))
  60. users = User.query.paginate(page, app.config['PER_PAGE'], error_out=True)
  61. data = {'title': '用户列表 - ', 'users': users}
  62. return render_template('forums/userlist.html', **data)
  63. @site.route('/messages/<int:receId>', methods=['POST'])
  64. @login_required
  65. def message(receId):
  66. form = MessageForm()
  67. rece_user = User.query.filter_by(id=receId).first_or_404()
  68. if form.validate_on_submit() and request.method == "POST":
  69. message = Notice()
  70. message.category = 'privacy'
  71. message.content = form.message.data
  72. message.rece_user = rece_user
  73. message.send_id = current_user.id
  74. db.session.add(message)
  75. db.session.commit()
  76. flash('成功发送', category='success')
  77. return redirect(url_for('user.user', user_url=rece_user.username))
  78. else:
  79. if form.errors:
  80. flash_errors(form)
  81. return redirect(url_for('user.user', user_url=rece_user.username))
  82. @site.route('/about')
  83. @cache.cached(timeout=60)
  84. def about():
  85. data = {'title': '关于 - '}
  86. return render_template('forums/about.html', **data)
  87. @site.route('/help')
  88. @cache.cached(timeout=60)
  89. def help():
  90. data = {'title': '帮助 - '}
  91. return render_template('forums/help.html', **data)
  92. @site.route('/order', methods=['POST'])
  93. def order():
  94. from maple.main.orderby import form_judge
  95. form = g.sort_form
  96. if form.validate_on_submit():
  97. topics = form_judge(form)
  98. data = {'topics': topics}
  99. return render_template('base/sort.html', **data)
  100. else:
  101. abort(404)