views.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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-7 19:54:5 (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': '', '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, app.config['PER_PAGE'],
  51. error_out=True)
  52. unread_notices = Notice.query.filter_by(rece_id=current_user.id,
  53. is_read=False).all()
  54. if unread_notices:
  55. for notice in unread_notices:
  56. notice.is_read = True
  57. db.session.commit()
  58. data = {'title': '消息提醒 - ', 'notices': notices}
  59. return render_template('forums/notice.html', **data)
  60. @site.route('/userlist')
  61. @login_required
  62. def userlist():
  63. page = is_num(request.args.get('page'))
  64. users = User.query.paginate(page, app.config['PER_PAGE'], error_out=True)
  65. data = {'title': '用户列表 - ', 'users': users}
  66. return render_template('forums/userlist.html', **data)
  67. @site.route('/messages/<int:receId>', methods=['POST'])
  68. @login_required
  69. def message(receId):
  70. form = MessageForm()
  71. rece_user = User.query.filter_by(id=receId).first_or_404()
  72. if form.validate_on_submit() and request.method == "POST":
  73. message = Notice()
  74. message.category = 'privacy'
  75. message.content = {'content': form.message.data}
  76. message.rece_user = rece_user
  77. message.send_id = current_user.id
  78. db.session.add(message)
  79. db.session.commit()
  80. flash('成功发送', category='success')
  81. return redirect(url_for('user.user', user_url=rece_user.username))
  82. else:
  83. if form.errors:
  84. flash_errors(form)
  85. return redirect(url_for('user.user', user_url=rece_user.username))
  86. @site.route('/about')
  87. @cache.cached(timeout=60)
  88. def about():
  89. data = {'title': '关于 - '}
  90. return render_template('forums/about.html', **data)
  91. @site.route('/help')
  92. @cache.cached(timeout=60)
  93. def help():
  94. data = {'title': '帮助 - '}
  95. return render_template('forums/help.html', **data)
  96. @site.route('/order', methods=['POST'])
  97. def order():
  98. from maple.main.orderby import form_judge
  99. form = g.sort_form
  100. if form.validate_on_submit():
  101. topics = form_judge(form)
  102. data = {'topics': topics}
  103. return render_template('base/sort.html', **data)
  104. else:
  105. abort(404)