123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # **************************************************************************
- # Copyright © 2016 jianglin
- # File Name: views.py
- # Author: jianglin
- # Email: xiyang0807@gmail.com
- # Created: 2016-12-21 21:56:41 (CST)
- # Last Update:星期六 2017-3-25 18:17:15 (CST)
- # By:
- # Description:
- # **************************************************************************
- from flask import (url_for, redirect, send_from_directory, current_app,
- request)
- from flask.views import MethodView
- from flask_login import login_required, current_user
- from flask_maple.auth.forms import form_validate
- from forums.api.setting.forms import error_callback, AvatarForm
- from werkzeug import secure_filename
- from time import time
- from random import randint
- from PIL import Image
- import os
- class AvatarView(MethodView):
- decorators = [login_required]
- @form_validate(AvatarForm, error=error_callback('setting.setting'), f='')
- def post(self):
- form = AvatarForm()
- file = request.files[form.avatar.name]
- filename = secure_filename(file.filename)
- filename = current_user.username + '-' + str(int(time())) + str(
- randint(1000, 9999))
- img = Image.open(file)
- size = 150, 150
- img.thumbnail(size, Image.ANTIALIAS)
- current_app.config.setdefault('AVATAR_FOLDER', os.path.join(
- current_app.static_folder, 'avatars/'))
- avatar_path = current_app.config['AVATAR_FOLDER']
- avatar = os.path.join(avatar_path, filename + '.png')
- if not os.path.exists(avatar_path):
- os.mkdir(avatar_path)
- img.save(avatar)
- img.close()
- info = current_user.info
- if info.avatar:
- ef = os.path.join(avatar_path, info.avatar)
- if os.path.exists(ef):
- os.remove(ef)
- # file.save(os.path.join(app.static_folder, filename + '.png'))
- info.avatar = filename + '.png'
- info.save()
- return redirect(url_for('setting.setting'))
- class AvatarFileView(MethodView):
- def get(self, filename):
- avatar_path = os.path.join(current_app.static_folder,
- current_app.config.get('AVATAR_FOLDER',
- 'avatars/'))
- if not os.path.exists(os.path.join(avatar_path, filename)):
- avatar_path = os.path.join(current_app.static_folder, 'images/')
- filename = 'Moo.png'
- return send_from_directory(avatar_path, filename)
|