views.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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-2 18:48:2 (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
  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. def index():
  26. topics = Topic.query.filter_by(is_good=True, is_top=False).paginate(1, 10)
  27. top_topics = Topic.query.filter_by(is_top=True).limit(5).all()
  28. if not topics.items:
  29. topics = Topic.query.paginate(1, 10)
  30. data = {'topics': topics, 'top_topics': top_topics}
  31. return render_template('forums/index.html', **data)
  32. @site.route('/index')
  33. def forums():
  34. boards = {}
  35. parent_boards = db.session.query(Board.parent_board).group_by(
  36. Board.parent_board)
  37. for parent_board in parent_boards:
  38. child_board = Board.query.filter_by(parent_board=parent_board).all()
  39. boards[parent_board[0]] = child_board
  40. data = {'boards': boards}
  41. return render_template('forums/forums.html', **data)
  42. @site.route('/notices')
  43. @login_required
  44. def notice():
  45. page = is_num(request.args.get('page'))
  46. notices = Notice.query.filter_by(
  47. rece_id=current_user.id).order_by(Notice.publish.desc()).paginate(
  48. page, app.config['PER_PAGE'],
  49. error_out=True)
  50. data = {'notices': notices}
  51. return render_template('forums/notice.html', **data)
  52. @site.route('/userlist')
  53. @login_required
  54. def userlist():
  55. page = is_num(request.args.get('page'))
  56. users = User.query.paginate(page, app.config['PER_PAGE'], error_out=True)
  57. data = {'users': users}
  58. return render_template('forums/userlist.html', **data)
  59. @site.route('/messages/<int:receId>', methods=['POST'])
  60. @login_required
  61. def message(receId):
  62. form = MessageForm()
  63. rece_user = User.query.filter_by(id=receId).first_or_404()
  64. if form.validate_on_submit() and request.method == "POST":
  65. message = Notice()
  66. message.category = 'privacy'
  67. message.content = form.message.data
  68. message.rece_user = rece_user
  69. message.send_id = current_user.id
  70. db.session.add(message)
  71. db.session.commit()
  72. flash('成功发送', category='success')
  73. return redirect(url_for('user.user', user_url=rece_user.username))
  74. else:
  75. if form.errors:
  76. flash_errors(form)
  77. return redirect(url_for('user.user', user_url=rece_user.username))
  78. @site.route('/about')
  79. def about():
  80. return render_template('forums/about.html')
  81. @site.route('/help')
  82. def help():
  83. return render_template('forums/help.html')
  84. @site.route('/order', methods=['POST'])
  85. def order():
  86. from maple.main.orderby import form_judge
  87. form = g.sort_form
  88. if form.validate_on_submit():
  89. topics = form_judge(form)
  90. data = {'topics': topics}
  91. return render_template('base/sort.html', **data)
  92. else:
  93. abort(404)