orderby.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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-20 17:12:4 (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 Topic
  16. from maple.tag.models import Tags
  17. from datetime import datetime, timedelta
  18. def form_judge(form):
  19. '''
  20. 0: all topic
  21. 1: one day
  22. 2: one week
  23. 3: one month
  24. 0: time
  25. 1: author
  26. 0: desc
  27. 1: asc
  28. '''
  29. t1 = form.display.data
  30. t2 = form.sort.data
  31. t3 = form.st.data
  32. data = form_sort(t1, t2, t3)
  33. return data
  34. def form_sort(t1, t2, t3):
  35. orderby = request.get_json()
  36. type = orderby['type']
  37. uid = orderby['uid']
  38. page = int(orderby['page'])
  39. if t1 == 0:
  40. time = datetime.now() - timedelta(days=365)
  41. elif t1 == 1:
  42. time = datetime.now() - timedelta(days=1)
  43. elif t1 == 2:
  44. time = datetime.now() - timedelta(days=7)
  45. else:
  46. time = datetime.now() - timedelta(days=30)
  47. # 发表时间或作者
  48. if t2 == 0:
  49. order = Topic.publish
  50. else:
  51. order = Topic.author_id
  52. # 升降序
  53. if t3 == 0:
  54. order = order.desc()
  55. else:
  56. order = order.asc()
  57. app = current_app._get_current_object()
  58. per_page = app.config['PER_PAGE']
  59. topic_base = Topic.query.join(Topic.board).filter(Topic.publish > time,
  60. Topic.is_top == False)
  61. if type == 'parent_b':
  62. topics = topic_base.filter(Board.parent_board == uid).order_by(
  63. order).paginate(page, per_page, True)
  64. elif type == 'child_b':
  65. topics = topic_base.filter(Board.id == uid).order_by(order).paginate(
  66. page, per_page, True)
  67. elif type == 'tags':
  68. topics = Topic.query.join(Topic.tags).filter(
  69. Topic.publish > time, Topic.is_top == False,
  70. Tags.tagname == uid).order_by(order).paginate(page, per_page, True)
  71. elif type == 'all':
  72. topics = Topic.query.filter(
  73. Topic.publish > time,
  74. Topic.is_top == False).order_by(order).paginate(page, per_page,
  75. True)
  76. else:
  77. topics = None
  78. return topics