views.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. from flask import g, redirect, render_template, request, jsonify, current_app, session
  2. from app import user_login_data, db, constants
  3. from app.models import Category, News
  4. from app.utils.pic_storage import pic_storage
  5. from app.utils.response_code import RET
  6. from . import profile_bp
  7. @profile_bp.route('/info')
  8. @user_login_data
  9. def get_user_info():
  10. """
  11. 获取用户信息
  12. 1.获取到当前登录的用户模型
  13. 2.返回模型中的指定内容
  14. :return:
  15. """
  16. user = g.user
  17. if not user:
  18. # 用户未登录,重定向到主页
  19. return redirect('/')
  20. data = {
  21. "user_info": user.to_dict()
  22. }
  23. return render_template("profile/user.html", data=data)
  24. @profile_bp.route("/base_info", methods=["GET", "POST"])
  25. @user_login_data
  26. def get_base_info():
  27. """
  28. 用户基本信息
  29. 1.获取用户登录信息
  30. 2.获取到传入参数
  31. 3.更新并保存数据
  32. 4.返回结果
  33. :return:
  34. """
  35. # 1.获取当前登录用户的信息
  36. user = g.user
  37. # 判断是否为get方法,若是则直接返回用户信息
  38. if request.method == "GET":
  39. return render_template("profile/user_base_info.html", data={"user_info": user.to_dict()})
  40. # 2.获取到传入参数
  41. data_dict = request.json
  42. nick_name = data_dict.get("nick_name")
  43. gender = data_dict.get("gender")
  44. signature = data_dict.get("signature")
  45. if not all([nick_name, gender, signature]):
  46. return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
  47. if gender not in (["MAN", "WOMAN"]):
  48. return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
  49. # 3.更新并保存数据
  50. user.nick_name = nick_name
  51. user.gender = gender
  52. user.signature = signature
  53. try:
  54. db.session.commit()
  55. except Exception as e:
  56. current_app.logger.error(e)
  57. db.session.rollback()
  58. return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
  59. # 讲session中保存的数据进行事实更新
  60. session["nick_name"] = nick_name
  61. return jsonify(errno=RET.OK, errmsg="更新成功")
  62. @profile_bp.route("/pic_info", methods=["GET", "POST"])
  63. @user_login_data
  64. def pic_info():
  65. user = g.user
  66. if request.method == "GET":
  67. return render_template("profile/user_pic_info.html", data={"user_info": user.to_dict()})
  68. # 1.获取到上传的文件
  69. try:
  70. avatar_file = request.files.get("avatar").read()
  71. except Exception as e:
  72. current_app.logger.error(e)
  73. return jsonify(errno=RET.PARAMERR, errmsg="读取文件出错")
  74. # 2.再将文件上传到奥七牛云
  75. try:
  76. url = pic_storage(avatar_file)
  77. except Exception as e:
  78. current_app.logger.error(e)
  79. return jsonify(errno=RET.THIRDERR, errmsg="上传图片错误")
  80. # 设置用户模块相关数据
  81. user.avatar_url = url
  82. # 将数据保存到数据库
  83. try:
  84. db.session.commit()
  85. except Exception as e:
  86. current_app.logger.error(e)
  87. db.session.rollback()
  88. return jsonify(errno=RET.DBERR, errmsg="数据存储有误")
  89. # 4.返回上传的结果<avatar_url>
  90. return jsonify(errno=RET.OK, errmsg="图片保存成功",
  91. data={"avatar_url": constants.QINIU_DOMIN_PREFIX + url})
  92. @profile_bp.route("/pass_info", methods=["GET", "POST"])
  93. @user_login_data
  94. def pass_info():
  95. if request.method == "GET":
  96. return render_template("profile/user_pass_info.html")
  97. # 1.获取到传入参数
  98. data_dict = request.json
  99. old_password = data_dict.get("old_password")
  100. new_password = data_dict.get("new_password")
  101. if not all([old_password, new_password]):
  102. return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
  103. # 2.获取当前登录用户的信息
  104. user = g.user
  105. if not user.check_passowrd(old_password):
  106. return jsonify(errno=RET.PWDERR, errmsg="原密码有误")
  107. # 更新数据
  108. user.password = new_password
  109. try:
  110. db.session.commit()
  111. except Exception as e:
  112. current_app.logger.error(e)
  113. db.session.rollback()
  114. return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
  115. return jsonify(errno=RET.OK, errmsg="保存成功")
  116. @profile_bp.route("/collection")
  117. @user_login_data
  118. def user_collection():
  119. # 获取页数
  120. page_num = request.args.get("p", 1)
  121. try:
  122. page_num = int(page_num)
  123. except Exception as e:
  124. current_app.logger.error(e)
  125. page_num = 1
  126. user = g.user
  127. collections = []
  128. current_page = 1
  129. total_page = 1
  130. if user:
  131. try:
  132. # 进行分页数据查询
  133. paginate = user.collection_news.paginate(page_num, constants.USER_COLLECTION_MAX_NEWS, False)
  134. # 获取分页数据
  135. collections = paginate.items
  136. # 获取当前页
  137. current_page = paginate.page
  138. # 获取总页数
  139. total_page = paginate.pages
  140. except Exception as e:
  141. current_app.logger.error(e)
  142. collection_dict_li = []
  143. for news in collections:
  144. collection_dict_li.append(news.to_dict())
  145. data = {
  146. "total_page": total_page,
  147. "current_page": current_page,
  148. "collections": collection_dict_li
  149. }
  150. return render_template("profile/user_collection.html", data=data)
  151. @profile_bp.route("/news_release", methods=["GET", "POST"])
  152. @user_login_data
  153. def news_release():
  154. if request.method == "GET":
  155. categories = []
  156. try:
  157. # 获取所有的分类数据
  158. categories = Category.query.all()
  159. except Exception as e:
  160. current_app.logger.error(e)
  161. # 定义列表保存分类数据
  162. categories_dict_list = []
  163. for category in categories:
  164. # 获取字典
  165. cate_dict = category.to_dict()
  166. # 拼接内容
  167. categories_dict_list.append(cate_dict)
  168. # 移除"最新"分类
  169. categories_dict_list.pop(0)
  170. data = {
  171. "categories": categories_dict_list
  172. }
  173. # 返回内容
  174. return render_template('profile/user_news_release.html', data=data)
  175. # POST提交,执行发布新闻操作
  176. # 1.获取要提交的数据
  177. title = request.form.get("title")
  178. source = "个人发布"
  179. digest = request.form.get("digest")
  180. content = request.form.get("content")
  181. index_image = request.files.get("index_image")
  182. category_id = request.form.get("category_id")
  183. # 1.1判断数据是否有值
  184. if not all([title, source, digest, content, index_image, category_id]):
  185. return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
  186. # 1.2尝试读取图片
  187. try:
  188. index_image = index_image.read()
  189. except Exception as e:
  190. current_app.logger.error(e)
  191. return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
  192. # 2.将标题图片上传到七牛
  193. try:
  194. key = pic_storage(index_image)
  195. except Exception as e:
  196. current_app.logger.error(e)
  197. return jsonify(errno=RET.THIRDERR, errmsg="上传图片失败")
  198. # 3.初始化新闻模型,并设置相关数据
  199. news = News()
  200. news.title = title
  201. news.digest = digest
  202. news.source = source
  203. news.content = content
  204. news.index_image_url = constants.QINIU_DOMIN_PREFIX + key
  205. news.category_id = category_id
  206. news.user_id = g.user.id
  207. # 1代表待审核状态
  208. news.status = 1
  209. # 4.保存到数据库
  210. try:
  211. db.session.add(news)
  212. db.session.commit()
  213. except Exception as e:
  214. current_app.logger.error(e)
  215. db.session.rollback()
  216. return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
  217. # 5.返回结果
  218. return jsonify(errno=RET.OK, errmsg="发布成功,等待审核")
  219. @profile_bp.route("/news_list")
  220. @user_login_data
  221. def news_list():
  222. #获取页数
  223. page_num = request.args.get("p", 1)
  224. try:
  225. page_num = int(page_num)
  226. except Exception as e:
  227. current_app.logger.error(e)
  228. page_num = 1
  229. user = g.user
  230. news_list = []
  231. current_page = 1
  232. total_page = 1
  233. try:
  234. paginate = News.query.filter(News.user_id == user.id)\
  235. .paginate(page_num, constants.USER_COLLECTION_MAX_NEWS, False )
  236. # 获取当前页数据
  237. news_list = paginate.items
  238. # 获取当前页
  239. current_page = paginate.page
  240. # 获取总页数
  241. total_page = paginate.pages
  242. except Exception as e:
  243. current_app.logger.error(e)
  244. news_dict_list = []
  245. for news in news_list:
  246. news_dict_list.append(news.to_dict())
  247. data = {
  248. "news_list": news_dict_list,
  249. "total_page": total_page,
  250. "current_page": current_page
  251. }
  252. return render_template('profile/user_news_list.html', data=data)