models.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: models.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-20 13:32:12 (CST)
  9. # Last Update:星期二 2016-6-14 23:20:15 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from maple import redis_data, db
  14. from maple.helpers import make_uid
  15. from maple.topic.models import Topic, Tags, Reply
  16. from flask_login import current_user
  17. from re import split as sp
  18. class RedisData(object):
  19. def set_topics():
  20. '''使用redis记录'''
  21. pipe = redis_data.pipeline()
  22. '''用户发帖数'''
  23. user = 'user:%s' % str(current_user.id)
  24. pipe.hincrby(user, 'topic', 1)
  25. pipe.hincrby(user, 'all:topic', 1)
  26. pipe.execute()
  27. def set_replies(qid):
  28. pipe = redis_data.pipeline()
  29. pipe.hincrby('topic:%s' % str(qid), 'replies', 1)
  30. pipe.execute()
  31. def set_read_count(qid):
  32. redis_data.hincrby('topic:%s' % str(qid), 'read', 1)
  33. def set_notice(user):
  34. redis_data.hincrby('user:%s' % str(user.id), 'notice', 1)
  35. def set_collect(user, num):
  36. redis_data.hincrby('user:%s' % str(user.id), 'collect', num)
  37. def set_love(user, num):
  38. redis_data.hincrby('user:%s' % str(user.id), 'love', num)
  39. def set_user():
  40. redis_data.hincrby('user:%s' % str(current_user.id), 'topic', 1)
  41. def set_user_all():
  42. redis_data.hincrby('user:%s' % str(current_user.id), 'all_topic', 1)
  43. def get_repies_count(qid):
  44. pages = redis_data.hget('topic:%s' % str(qid), 'replies')
  45. return pages
  46. def get_pages(large, little):
  47. pages = redis_data.zscore(large, little)
  48. return pages
  49. class SQLData(object):
  50. def set_topics(form):
  51. topic = Topic()
  52. topic.title = form.title.data
  53. topic.content = form.content.data
  54. topic.uid = make_uid()
  55. topic.author = current_user
  56. tags = sp(',|;|,|;| ', form.tags.data)
  57. tags = list(set(tags))[:4]
  58. post_tags = []
  59. for tag in tags:
  60. if tag != '':
  61. exsit_tag = Tags.query.filter_by(tagname = tag).first()
  62. if exsit_tag is not None:
  63. post_tags.append(exsit_tag)
  64. else:
  65. t = Tags()
  66. t.tagname = tag
  67. post_tags.append(t)
  68. topic.tags = post_tags
  69. topic.board_id = form.category.data
  70. db.session.add(topic)
  71. db.session.commit()
  72. topic.board.count.topics += 1
  73. topic.board.count.all_topics += 1
  74. db.session.commit()
  75. RedisData.set_topics()
  76. def set_replies(form, uid):
  77. reply = Reply()
  78. reply.content = form.content.data
  79. reply.author = current_user
  80. reply.topic_id = uid
  81. db.session.add(reply)
  82. db.session.commit()
  83. reply.topic.board.count.all_topics += 1
  84. db.session.commit()
  85. RedisData.set_replies(uid)