orderby.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: orderby.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-06-05 10:15:58 (CST)
  9. # Last Update:星期四 2016-7-7 4:0:25 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import request, current_app
  14. from maple.forums.models import Board
  15. from maple.topic.models import Tags, Topic
  16. from datetime import datetime, timedelta
  17. def form_judge(form):
  18. '''
  19. 0: all topic
  20. 1: one day
  21. 2: one week
  22. 3: one month
  23. 0: time
  24. 1: author
  25. 0: desc
  26. 1: asc
  27. '''
  28. t1 = form.display.data
  29. t2 = form.sort.data
  30. t3 = form.st.data
  31. data = form_sort(t1, t2, t3)
  32. return data
  33. def form_sort(t1, t2, t3):
  34. orderby = request.get_json()
  35. type = orderby['type']
  36. uid = orderby['uid']
  37. page = int(orderby['page'])
  38. if t1 == 0:
  39. time = datetime.now() - timedelta(days=365)
  40. elif t1 == 1:
  41. time = datetime.now() - timedelta(days=1)
  42. elif t1 == 2:
  43. time = datetime.now() - timedelta(days=7)
  44. else:
  45. time = datetime.now() - timedelta(days=30)
  46. # 发表时间或作者
  47. if t2 == 0:
  48. order = Topic.publish
  49. else:
  50. order = Topic.author_id
  51. # 升降序
  52. if t3 == 0:
  53. order = order.desc()
  54. else:
  55. order = order.asc()
  56. app = current_app._get_current_object()
  57. per_page = app.config['PER_PAGE']
  58. topic_base = Topic.query.join(Topic.board).filter(Topic.publish > time,
  59. Topic.is_top == False)
  60. if type == 'parent_b':
  61. topics = topic_base.filter(Board.parent_board == uid).order_by(
  62. order).paginate(page, per_page, True)
  63. elif type == 'child_b':
  64. topics = topic_base.filter(Board.id == uid).order_by(order).paginate(
  65. page, per_page, True)
  66. elif type == 'tags':
  67. topics = Topic.query.join(Topic.tags).filter(
  68. Topic.publish > time, Topic.is_top == False,
  69. Tags.tagname == uid).order_by(order).paginate(page, per_page, True)
  70. elif type == 'all':
  71. topics = Topic.query.filter(
  72. Topic.publish > time,
  73. Topic.is_top == False).order_by(order).paginate(page, per_page,
  74. True)
  75. else:
  76. topics = None
  77. return topics