views.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: views.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-20 18:04:43 (CST)
  9. # Last Update:星期二 2016-6-14 23:20:14 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (Blueprint, render_template, request, g, url_for, redirect,
  14. abort)
  15. from maple import app
  16. from maple.helpers import is_num
  17. from maple.topic.models import Topic, Reply, Collect
  18. from maple.user.models import User
  19. site = Blueprint('user', __name__)
  20. @site.url_value_preprocessor
  21. def pull_user_url(endpoint, values):
  22. g.user_url = values.pop('user_url')
  23. user = User.query.filter_by(username=g.user_url).first()
  24. if user is None:
  25. abort(404)
  26. @site.url_defaults
  27. def add_user_url(endpoint, values):
  28. if 'user_url' in values or not g.user_url:
  29. return
  30. values['user_url'] = g.user_url
  31. @site.route('')
  32. def user():
  33. topics = Topic.query.join(Topic.author).filter(
  34. User.username == g.user_url).paginate(1,
  35. app.config['PER_PAGE'],
  36. error_out=True)
  37. data = {'type': 'topic', 'topics': topics}
  38. return render_template('user/user.html', **data)
  39. @site.route('/topics')
  40. def topic():
  41. page = is_num(request.args.get('page'))
  42. topics = Topic.query.join(Topic.author).filter(
  43. User.username == g.user_url).paginate(page,
  44. app.config['PER_PAGE'],
  45. error_out=True)
  46. data = {'type': 'topic', 'topics': topics}
  47. return render_template('user/user.html', **data)
  48. @site.route('/replies')
  49. def reply():
  50. page = is_num(request.args.get('page'))
  51. replies = Reply.query.join(Reply.author).filter(
  52. User.username == g.user_url).paginate(page,
  53. app.config['PER_PAGE'],
  54. error_out=True)
  55. data = {'type': 'reply', 'replies': replies}
  56. return render_template('user/user.html', **data)
  57. @site.route('/collects')
  58. def collect():
  59. page = is_num(request.args.get('page'))
  60. collects = Collect.query.paginate(page,
  61. app.config['PER_PAGE'],
  62. error_out=True)
  63. data = {'type': 'collect', 'collects': collects}
  64. return render_template('user/user.html', **data)
  65. @site.route('/following')
  66. def following():
  67. return redirect(url_for('mine.follow'))
  68. @site.route('/followers')
  69. def follower():
  70. page = is_num(request.args.get('page'))
  71. user = User.query.filter_by(username=g.user_url).first_or_404()
  72. followers = user.followers.paginate(page,
  73. app.config['PER_PAGE'],
  74. error_out=True)
  75. data = {'type': 'follower', 'followers': followers}
  76. return render_template('user/user.html', **data)