views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. # *************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: academy.py
  4. # Author:JiangLin
  5. # Mail:xiyang0807@gmail.com
  6. # Created Time: 2016-02-07 12:34:33
  7. # *************************************************************************
  8. # !/usr/bin/env python
  9. # -*- coding=UTF-8 -*-
  10. from flask import (render_template,
  11. Blueprint,
  12. request,
  13. abort,
  14. jsonify,
  15. redirect,
  16. url_for)
  17. from flask_login import (current_user, login_required)
  18. from maple import db
  19. from maple.main.utils import random_gift
  20. from maple.main.models import RedisData
  21. from maple.main.permissions import que_permission
  22. from maple.forms.forms import return_errors, flash_errors
  23. from maple.group.models import Group, Message
  24. from maple.group.forms import ApplyForm
  25. from maple.user.models import User
  26. from maple.question.forms import QuestionForm
  27. from maple.question.models import Questions, Tags
  28. from maple.question.forms import ReplyForm, PhotoForm
  29. from re import split as sp
  30. site = Blueprint('group', __name__)
  31. @site.route('')
  32. def index():
  33. groups = db.session.query(Group.kind).group_by(Group.kind).all()
  34. return render_template('group/group.html', groups=groups)
  35. @site.route('/<group>', methods=['GET'])
  36. def group(group):
  37. group = Group.load_by_name(group)
  38. form = ApplyForm()
  39. return render_template('group/view.html', group=group, form=form)
  40. @site.route('/<group>', methods=['POST'])
  41. @login_required
  42. def groups(group):
  43. group = Group.load_by_name(group)
  44. form = ApplyForm()
  45. if form.validate_on_submit():
  46. content = form.content.data
  47. letter = Message(send_user=current_user.name,
  48. rece_user=group.admin,
  49. kind='letter',
  50. content=content)
  51. db.session.add(letter)
  52. db.session.commit()
  53. user = User.query.filter_by(name= group.name).first()
  54. RedisData.set_notice(user)
  55. return redirect(url_for('group.group', group=group.name))
  56. else:
  57. if form.errors:
  58. flash_errors(form)
  59. return redirect(url_for('group.group', group=group.name))
  60. else:
  61. pass
  62. abort(404)
  63. @site.route('/<group>/view')
  64. def view(group):
  65. qid = request.args.get('qid')
  66. RedisData.set_read_count(qid)
  67. form = ReplyForm()
  68. question = Questions.load_by_id(qid)
  69. return render_template('question/content.html',
  70. question=question,
  71. form=form,
  72. kind='group')
  73. @site.route('/<group>/question', methods=['GET', 'POST'])
  74. @login_required
  75. @que_permission
  76. def question(group):
  77. group = Group.load_by_name(group)
  78. form = QuestionForm()
  79. fileform = PhotoForm()
  80. error = None
  81. if form.validate_on_submit():
  82. title = form.title.data
  83. content = form.content.data
  84. choice = form.choice.data
  85. tags = form.tags.data
  86. tags = sp(',|;|,|;| ', tags)
  87. tags = list(set(tags))[:4]
  88. post_tags = []
  89. for tag in tags:
  90. if tag != '':
  91. t = Tags(author=current_user.name, name=tag)
  92. post_tags.append(t)
  93. question = Questions(title=title, content=content, kind=group.kind)
  94. question.tags = post_tags
  95. if choice == 'Markdown':
  96. question.is_markdown = True
  97. question.is_group = True
  98. question.group_id = group.id
  99. question.author_id = current_user.id
  100. group.count.topic += 1
  101. group.count.all_topic += 1
  102. current_user.infor.score -= 5
  103. '''随机赠送'''
  104. random_gift()
  105. db.session.add(question)
  106. db.session.commit()
  107. '''使用redis记录'''
  108. RedisData.set_question()
  109. RedisData.set_user()
  110. return jsonify(judge=True, error=error)
  111. else:
  112. if form.errors:
  113. return return_errors(form)
  114. else:
  115. pass
  116. return render_template('group/question.html',
  117. group=group,
  118. form=form,
  119. fileform=fileform)