views.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from app import constants
  2. from app.models import User, News, Category
  3. from app.utils.response_code import RET
  4. from . import index_bp
  5. from flask import render_template, current_app, session, request, jsonify
  6. @index_bp.route('/')
  7. def index():
  8. # 获取到当前登录用户的id
  9. user_id = session.get("user_id")
  10. # 通过id获取用户信息
  11. user = None # type = User
  12. if user_id:
  13. try:
  14. user = User.query.get(user_id)
  15. except Exception as e:
  16. current_app.logger.error(e)
  17. # 获取点击排行数据
  18. new_list = None
  19. try:
  20. new_list = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
  21. except Exception as e:
  22. current_app.logger.error(e)
  23. click_news_list = []
  24. for news in new_list if new_list else []:
  25. click_news_list.append(news.to_basic_dict())
  26. # 获取新闻分类数据
  27. categories = Category.query.all()
  28. # 定义列表保存分类数据
  29. categories_dicts = []
  30. for category in categories:
  31. # 拼接内容
  32. # print(category)
  33. categories_dicts.append(category.to_dict())
  34. data = {
  35. 'user_info': user.to_dict() if user else None,
  36. 'click_news_list': click_news_list,
  37. 'categories': categories_dicts
  38. }
  39. return render_template("news/index.html", data=data)
  40. @index_bp.route('/favicon.ico')
  41. def favicon():
  42. return current_app.send_static_file("news/favicon.ico")
  43. @index_bp.route('/newslist')
  44. def get_news_list():
  45. """
  46. 获取指定分类的新闻列表
  47. 1.获取参数
  48. 2.校验参数
  49. 3.查询数据
  50. 4.返回数据
  51. :return:
  52. """
  53. # 1.获取参数
  54. args_dict = request.args
  55. page = args_dict.get("page", "1")
  56. per_page = args_dict.get("per_page", constants.HOME_PAGE_MAX_NEWS)
  57. category_id = args_dict.get("cid", "1")
  58. # 2.校验参数
  59. try:
  60. page = int(page)
  61. per_page = int(per_page)
  62. except Exception as e:
  63. current_app.logger.error(e)
  64. return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
  65. # 3.查询数据并分页
  66. filters = []
  67. # 如果不分类id不为1,那么添加分类id的过滤
  68. if category_id != "1":
  69. filters.append(News.category_id == category_id)
  70. try:
  71. paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, per_page, False)
  72. # 获取查询出来的数据
  73. items = paginate.items
  74. # 获取到总页数
  75. total_page = paginate.pages
  76. # 获取到当前页数
  77. current_page = paginate.page
  78. except Exception as e:
  79. current_app.logger.error(e)
  80. return jsonify(errno=RET.DBERR, errmsg="数据查询失败")
  81. news_lst = []
  82. for news in items:
  83. news_lst.append(news.to_dict())
  84. data = {
  85. "news_list": news_lst,
  86. "current_page": current_page,
  87. "total_page": total_page
  88. }
  89. return jsonify(errno=RET.OK, errmsg="查询新闻列表数据成功", data=data)