views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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-12-15 22:08:06 (CST)
  9. # Last Update:星期日 2017-4-2 11:51:33 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import redirect, render_template, request, url_for
  14. from flask_login import current_user, login_required
  15. from forums.api.forums.models import Board
  16. from forums.api.tag.models import Tags
  17. from forums.api.topic.models import Topic, Reply
  18. from forums.api.collect.models import Collect
  19. from forums.common.utils import gen_filter_dict, gen_order_by
  20. from forums.common.views import BaseMethodView as MethodView
  21. from .models import User
  22. class UserListView(MethodView):
  23. @login_required
  24. def get(self):
  25. query_dict = request.data
  26. page, number = self.page_info
  27. keys = ['username']
  28. order_by = gen_order_by(query_dict, keys)
  29. filter_dict = gen_filter_dict(query_dict, keys)
  30. users = User.query.filter_by(
  31. **filter_dict).order_by(*order_by).paginate(page, number, True)
  32. return render_template('user/user_list.html', users=users)
  33. class UserView(MethodView):
  34. def get(self, username):
  35. query_dict = request.data
  36. user = User.query.filter_by(username=username).first_or_404()
  37. page, number = self.page_info
  38. keys = ['title']
  39. order_by = gen_order_by(query_dict, keys)
  40. filter_dict = gen_filter_dict(query_dict, keys)
  41. filter_dict.update(author_id=user.id)
  42. topics = Topic.query.filter_by(
  43. **filter_dict).order_by(*order_by).paginate(page, number, True)
  44. setting = user.setting
  45. topic_is_allowed = False
  46. if setting.topic_list == 1 or (setting.topic_list == 2 and
  47. current_user.is_authenticated):
  48. topic_is_allowed = True
  49. if current_user.is_authenticated and current_user.id == user.id:
  50. topic_is_allowed = True
  51. data = {
  52. 'topics': topics,
  53. 'user': user,
  54. 'topic_is_allowed': topic_is_allowed
  55. }
  56. return render_template('user/user.html', **data)
  57. class UserReplyListView(MethodView):
  58. def get(self, username):
  59. query_dict = request.data
  60. user = User.query.filter_by(username=username).first_or_404()
  61. page, number = self.page_info
  62. keys = ['title']
  63. order_by = gen_order_by(query_dict, keys)
  64. filter_dict = gen_filter_dict(query_dict, keys)
  65. filter_dict.update(author_id=user.id)
  66. replies = Reply.query.filter_by(
  67. **filter_dict).order_by(*order_by).paginate(page, number, True)
  68. setting = user.setting
  69. replies_is_allowed = False
  70. if setting.rep_list == 1 or (current_user.is_authenticated and
  71. setting.rep_list == 2):
  72. replies_is_allowed = True
  73. if current_user.is_authenticated and current_user.id == user.id:
  74. replies_is_allowed = True
  75. data = {
  76. 'replies': replies,
  77. 'user': user,
  78. 'replies_is_allowed': replies_is_allowed
  79. }
  80. return render_template('user/replies.html', **data)
  81. class UserFollowerListView(MethodView):
  82. @login_required
  83. def get(self, username):
  84. user = User.query.filter_by(username=username).first_or_404()
  85. page, number = self.page_info
  86. followers = user.followers.paginate(page, number, True)
  87. data = {'followers': followers, 'user': user}
  88. return render_template('user/followers.html', **data)
  89. class UserFollowingListView(MethodView):
  90. def get(self):
  91. return redirect(url_for('follow.topic'))
  92. class UserCollectListView(MethodView):
  93. def get(self, username):
  94. return redirect(url_for('follow.collect'))