views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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-12-20 22:16:04 (CST)
  9. # Last Update:星期三 2017-5-10 16:35:45 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import render_template, redirect, url_for, flash, request
  14. from flask_login import current_user, logout_user
  15. from forums.api.forms import (ProfileForm, PasswordForm, PrivacyForm,
  16. AvatarForm, BabelForm)
  17. from forums.common.views import IsConfirmedMethodView as MethodView
  18. from flask_maple.form import form_validate
  19. def error_callback(url):
  20. return lambda: redirect(url_for(url))
  21. class ProfileView(MethodView):
  22. def get(self):
  23. user = request.user
  24. form = ProfileForm()
  25. avatarform = AvatarForm()
  26. info = user.info
  27. form.introduce.data = info.introduce
  28. form.school.data = info.school
  29. form.word.data = info.word
  30. data = {'form': form, 'avatarform': avatarform}
  31. return render_template('setting/setting.html', **data)
  32. @form_validate(ProfileForm, error=error_callback('setting.setting'), f='')
  33. def post(self):
  34. form = ProfileForm()
  35. info = current_user.info
  36. info.introduce = form.introduce.data
  37. info.school = form.school.data
  38. info.word = form.word.data
  39. info.save()
  40. return redirect(url_for('setting.setting'))
  41. class PasswordView(MethodView):
  42. def get(self):
  43. form = PasswordForm()
  44. data = {'form': form}
  45. return render_template('setting/password.html', **data)
  46. @form_validate(
  47. PasswordForm, error=error_callback('setting.password'), f='')
  48. def post(self):
  49. user = request.user
  50. form = PasswordForm()
  51. if user.check_password(form.old_password.data):
  52. user.set_password(form.new_password.data)
  53. user.save()
  54. logout_user()
  55. return redirect(url_for('auth.login'))
  56. flash('原密码错误', 'warning')
  57. return redirect(url_for('setting.password'))
  58. class PrivacyView(MethodView):
  59. def get(self):
  60. user = request.user
  61. setting = user.setting
  62. form = PrivacyForm()
  63. form.online_status.data = setting.online_status
  64. form.topic_list.data = setting.topic_list
  65. form.rep_list.data = setting.rep_list
  66. form.ntb_list.data = setting.ntb_list
  67. form.collect_list.data = setting.collect_list
  68. return render_template('setting/privacy.html', form=form)
  69. @form_validate(PrivacyForm, error=error_callback('setting.privacy'), f='')
  70. def post(self):
  71. user = request.user
  72. form = PrivacyForm()
  73. setting = user.setting
  74. setting.online_status = form.online_status.data
  75. setting.topic_list = form.topic_list.data
  76. setting.rep_list = form.rep_list.data
  77. setting.ntb_list = form.ntb_list.data
  78. setting.collect_list = form.collect_list.data
  79. setting.save()
  80. return redirect(url_for('setting.privacy'))
  81. class BabelView(MethodView):
  82. def get(self):
  83. user = request.user
  84. setting = user.setting
  85. form = BabelForm()
  86. form.timezone.data = setting.timezone
  87. form.locale.data = setting.locale
  88. return render_template('setting/babel.html', form=form)
  89. @form_validate(BabelForm, error=error_callback('setting.babel'), f='')
  90. def post(self):
  91. user = request.user
  92. setting = user.setting
  93. form = BabelForm()
  94. setting.timezone = form.timezone.data
  95. setting.locale = form.locale.data
  96. setting.save()
  97. return redirect(url_for('setting.babel'))