views.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. # *************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: index.py
  4. # Author:JiangLin
  5. # Mail:xiyang0807@gmail.com
  6. # Created Time: 2015-11-25 02:21:04
  7. # *************************************************************************
  8. # !/usr/bin/env python
  9. # -*- coding=UTF-8 -*-
  10. from flask import (Blueprint, request,
  11. abort, flash,
  12. Markup, jsonify,
  13. redirect, url_for,
  14. g, render_template)
  15. from flask_login import current_user, login_required
  16. from maple.group.models import Message
  17. from maple.question.models import Collector, Lover, Replies
  18. from maple.question.forms import ReplyForm
  19. from maple.user.models import User
  20. from maple.main.filters import safe_clean
  21. from maple.main.utils import random_gift, load_qid
  22. from maple.main.models import RedisData
  23. from maple.main.permissions import rep_permission
  24. from maple import db
  25. from datetime import datetime
  26. site = Blueprint('question', __name__)
  27. @site.route('/preview', methods=['GET', 'POST'])
  28. @login_required
  29. def preview():
  30. if request.method == "POST":
  31. from misaka import Markdown, HtmlRenderer
  32. choice = request.values.get('choice')
  33. content = request.values.get('content')
  34. if choice == 'Default':
  35. return safe_clean(content)
  36. else:
  37. html = HtmlRenderer()
  38. markdown = Markdown(html)
  39. return Markup(markdown(content))
  40. else:
  41. abort(404)
  42. @site.route('/uploads', methods=('GET', 'POST'))
  43. @login_required
  44. def upload():
  45. abort(404)
  46. # form = PhotoForm()
  47. # if form.validate_on_submit():
  48. # filedata = form.photo.data
  49. # print(filedata)
  50. # filename = secure_filename(form.photo.data.filename)
  51. # print(filename)
  52. # form.photo.data.save(os.path.join(app.static_folder, filename))
  53. # return jsonify(judge=True, error=filename)
  54. # else:
  55. # if form.errors is not None:
  56. # return return_errors(form)
  57. # else:
  58. # return jsonify(judge=False, error='上传失败')
  59. @site.route('/uploads/<filename>')
  60. def send_file(filename):
  61. abort(404)
  62. # return send_from_directory(app.static_folder, filename)
  63. @site.route('/collect', methods=['GET', 'POST'])
  64. @login_required
  65. def collect():
  66. if request.method == "POST":
  67. qid = request.values.get('qid')
  68. collect = Collector.load(qid, current_user.id)
  69. if collect is not None:
  70. db.session.delete(collect)
  71. db.session.commit()
  72. RedisData.set_collect(current_user, -1)
  73. return jsonify(judge=True)
  74. else:
  75. collect = Collector()
  76. collect.question_id = qid
  77. collect.user_id = current_user.id
  78. db.session.add(collect)
  79. db.session.commit()
  80. user = User.load_by_id(collect.user_id)
  81. if current_user.name != user.name:
  82. message = Message(send_user=current_user.name,
  83. rece_user=user.name,
  84. kind='collect',
  85. content='a')
  86. message.question_id = qid
  87. db.session.add(message)
  88. db.session.commit()
  89. RedisData.set_notice(user, 1)
  90. else:
  91. pass
  92. RedisData.set_collect(current_user, 1)
  93. return jsonify(judge=True)
  94. else:
  95. abort(404)
  96. @site.route('/love', methods=['GET', 'POST'])
  97. @login_required
  98. def love():
  99. '''点赞'''
  100. if request.method == "POST":
  101. rid = request.values.get('rid')
  102. print(rid)
  103. love = Lover.load(rid, current_user.id)
  104. if love is not None:
  105. db.session.delete(love)
  106. db.session.commit()
  107. RedisData.set_love(current_user, -1)
  108. flash('成功取消赞')
  109. return jsonify(judge=True)
  110. else:
  111. love = Lover()
  112. love.reply_id = rid
  113. love.user_id = current_user.id
  114. db.session.add(love)
  115. db.session.commit()
  116. user = User.load_by_id(love.user_id)
  117. if current_user.name != user.name:
  118. message = Message(send_user=current_user.name,
  119. rece_user=user.name,
  120. kind='love',
  121. content='a')
  122. message.reply_id = rid
  123. db.session.add(message)
  124. db.session.commit()
  125. RedisData.set_notice(user, 1)
  126. else:
  127. pass
  128. RedisData.set_love(current_user, 1)
  129. flash('赞成功')
  130. return jsonify(judge=True)
  131. else:
  132. abort(404)
  133. @site.route('/reply', methods=['GET', 'POST'])
  134. @login_required
  135. @rep_permission
  136. def reply():
  137. error = None
  138. form = ReplyForm()
  139. if form.validate_on_submit() and request.method == "POST":
  140. qid = request.args.get('qid')
  141. qid = load_qid(qid)
  142. quote = request.get_json()['quote']
  143. content = form.content.data
  144. reply = Replies(content=content, quote=quote)
  145. reply.question_id = qid
  146. reply.author_id = current_user.id
  147. current_user.infor.score -= 1
  148. '''随机赠送'''
  149. random_gift()
  150. db.session.add(reply)
  151. db.session.commit()
  152. '''消息通知'''
  153. if current_user.name != reply.question.author.name:
  154. message = Message(send_user=current_user.name,
  155. rece_user=reply.question.author.name,
  156. kind='reply',
  157. content=reply.content)
  158. message.reply_id = reply.id
  159. RedisData.set_notice(reply.question.author)
  160. db.session.add(message)
  161. reply.question.last_author = current_user.name
  162. reply.question.last_time = datetime.now()
  163. if reply.question.is_group:
  164. reply.question.group.count.all_topic += 1
  165. else:
  166. reply.question.board.count.all_topic += 1
  167. reply.question.board.board_f.count.all_topic += 1
  168. db.session.commit()
  169. '''使用redis记录'''
  170. RedisData.set_replies(qid)
  171. RedisData.set_user_all()
  172. return jsonify(judge=True, error=error)
  173. else:
  174. if form.content.errors:
  175. error = form.content.errors
  176. return jsonify(judge=False, error=error)
  177. else:
  178. pass
  179. return redirect(url_for('forums.forums'))
  180. @site.route('/rreply', methods=['GET', 'POST'])
  181. @login_required
  182. def rreply():
  183. if request.method == "POST":
  184. rid = request.values.get('rid')
  185. reply = Replies.load_by_id(rid)
  186. if reply.quote is None:
  187. content = '<blockquote>引用了<b>%s</b> 的回复:<br>%s</blockquote>\n' % (
  188. reply.author.name, reply.content)
  189. else:
  190. content = '<blockquote>引用了<b>%s</b> 的回复:' + \
  191. '<br>%s%s</blockquote>\n' % (
  192. reply.author.name, reply.quote, reply.content)
  193. # if current_user.name != reply.author:
  194. # '''提醒'''
  195. # user = User.get_by_name(reply.author)
  196. # RedisData.set_notice(user)
  197. return content
  198. else:
  199. abort(404)
  200. @site.route('/order', methods=['GET', 'POST'])
  201. def order():
  202. from maple.main.sort import form_judge
  203. form = g.sortform
  204. if form.validate_on_submit() and request.method == "POST":
  205. questions = form_judge(form)
  206. return render_template('base/sort.html', questions=questions)
  207. else:
  208. abort(404)