views.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #*************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: tags.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, Blueprint,request, g, jsonify
  11. from maple.question.models import Questions, Tags
  12. from maple.board.models import Board_F, Board_S
  13. from maple.question.forms import ReplyForm, PhotoForm, QuestionForm
  14. from maple.main.permissions import que_permission
  15. from maple.main.utils import random_gift
  16. from maple.main.models import RedisData
  17. from maple.forms.forms import return_errors
  18. from flask_login import current_user, login_required
  19. from maple import db
  20. from re import split as sp
  21. site = Blueprint('board', __name__)
  22. @site.url_value_preprocessor
  23. def pull_url(endpoint, values):
  24. forums_url = values.pop('forums_url')
  25. g.forums_url = forums_url
  26. @site.url_defaults
  27. def add_url(endpoint, values):
  28. if 'forums_url' in values or not g.forums_url:
  29. return
  30. values['forums_url'] = g.forums_url
  31. @site.route('', defaults={'class_url': None})
  32. @site.route('/<class_url>')
  33. def board(class_url):
  34. if class_url is None:
  35. board = Board_F.load_by_name(g.forums_url)
  36. questions = Questions.load_by_kind(g.forums_url)
  37. return render_template('board/board.html',
  38. board=board,
  39. questions=questions,
  40. class_url=class_url)
  41. else:
  42. board = Board_S.query.join(Board_F).\
  43. filter(Board_F.enname_f == g.forums_url).\
  44. filter(Board_S.enname_s == class_url).first_or_404()
  45. return render_template('board/board_s.html',
  46. board=board,
  47. class_url=class_url)
  48. @site.route('/<class_url>/view')
  49. def view(class_url):
  50. qid = request.args.get('qid')
  51. RedisData.set_read_count(qid)
  52. form = ReplyForm()
  53. question = Questions.load_by_id(qid)
  54. return render_template('question/content.html',
  55. question=question,
  56. form=form,
  57. kind='board')
  58. @site.route('/<class_url>/question', methods=['GET', 'POST'])
  59. @login_required
  60. @que_permission
  61. def question(class_url):
  62. error = None
  63. form = QuestionForm()
  64. fileform = PhotoForm()
  65. if form.validate_on_submit():
  66. title = form.title.data
  67. content = form.content.data
  68. choice = form.choice.data
  69. tags = form.tags.data
  70. tags = sp(',|;|,|;| ', tags)
  71. tags = list(set(tags))[:4]
  72. post_tags = []
  73. for tag in tags:
  74. if tag != '':
  75. t = Tags(author=current_user.name, name=tag)
  76. post_tags.append(t)
  77. question = Questions(title=title, content=content, kind=g.forums_url)
  78. question.tags = post_tags
  79. if choice == 'Markdown':
  80. question.is_markdown = True
  81. board = Board_S.load_by_name(class_url)
  82. board.count.topic += 1
  83. board.count.all_topic += 1
  84. board.board_f.count.topic += 1
  85. board.board_f.count.all_topic += 1
  86. question.board_id = board.id
  87. question.author_id = current_user.id
  88. current_user.infor.score -= 5
  89. '''随机赠送'''
  90. random_gift()
  91. db.session.add(question)
  92. db.session.commit()
  93. '''使用redis记录'''
  94. RedisData.set_question()
  95. RedisData.set_user()
  96. return jsonify(judge=True, error=error)
  97. else:
  98. if form.errors:
  99. return return_errors(form)
  100. else:
  101. pass
  102. board = Board_S.query.join(Board_F).\
  103. filter(Board_F.enname_f == g.forums_url).\
  104. filter(Board_S.enname_s == class_url).first_or_404()
  105. return render_template('question/question.html',
  106. fileform=fileform,
  107. form=form,
  108. board=board)