views.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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-21 21:56:41 (CST)
  9. # Last Update:星期六 2017-3-25 18:17:15 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (url_for, redirect, send_from_directory, current_app,
  14. request)
  15. from flask.views import MethodView
  16. from flask_login import login_required, current_user
  17. from flask_maple.auth.forms import form_validate
  18. from forums.api.setting.forms import error_callback, AvatarForm
  19. from werkzeug import secure_filename
  20. from time import time
  21. from random import randint
  22. from PIL import Image
  23. import os
  24. class AvatarView(MethodView):
  25. decorators = [login_required]
  26. @form_validate(AvatarForm, error=error_callback('setting.setting'), f='')
  27. def post(self):
  28. form = AvatarForm()
  29. file = request.files[form.avatar.name]
  30. filename = secure_filename(file.filename)
  31. filename = current_user.username + '-' + str(int(time())) + str(
  32. randint(1000, 9999))
  33. img = Image.open(file)
  34. size = 150, 150
  35. img.thumbnail(size, Image.ANTIALIAS)
  36. current_app.config.setdefault('AVATAR_FOLDER', os.path.join(
  37. current_app.static_folder, 'avatars/'))
  38. avatar_path = current_app.config['AVATAR_FOLDER']
  39. avatar = os.path.join(avatar_path, filename + '.png')
  40. if not os.path.exists(avatar_path):
  41. os.mkdir(avatar_path)
  42. img.save(avatar)
  43. img.close()
  44. info = current_user.info
  45. if info.avatar:
  46. ef = os.path.join(avatar_path, info.avatar)
  47. if os.path.exists(ef):
  48. os.remove(ef)
  49. # file.save(os.path.join(app.static_folder, filename + '.png'))
  50. info.avatar = filename + '.png'
  51. info.save()
  52. return redirect(url_for('setting.setting'))
  53. class AvatarFileView(MethodView):
  54. def get(self, filename):
  55. avatar_path = os.path.join(current_app.static_folder,
  56. current_app.config.get('AVATAR_FOLDER',
  57. 'avatars/'))
  58. if not os.path.exists(os.path.join(avatar_path, filename)):
  59. avatar_path = os.path.join(current_app.static_folder, 'images/')
  60. filename = 'Moo.png'
  61. return send_from_directory(avatar_path, filename)