前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >flask 常用辅助类utils.py(flask 90)

flask 常用辅助类utils.py(flask 90)

作者头像
用户5760343
发布2019-08-20 18:05:20
发布2019-08-20 18:05:20
58100
代码可运行
举报
文章被收录于专栏:sktjsktj
运行总次数:0
代码可运行

import os import uuid

try: from urlparse import urlparse, urljoin except ImportError: from urllib.parse import urlparse, urljoin

import PIL from PIL import Image from flask import current_app, request, url_for, redirect, flash from itsdangerous import BadSignature, SignatureExpired from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

from extensions import db from model import User from settings import Operations

def generate_token(user, operation, expire_in=None, **kwargs): s = Serializer(current_app.config['SECRET_KEY'], expire_in)

代码语言:javascript
代码运行次数:0
复制
data = {'id': user.id, 'operation': operation}
data.update(**kwargs)
return s.dumps(data)

def validate_token(user, token, operation, new_password=None): s = Serializer(current_app.config['SECRET_KEY'])

代码语言:javascript
代码运行次数:0
复制
try:
    data = s.loads(token)
except (SignatureExpired, BadSignature):
    return False

if operation != data.get('operation') or user.id != data.get('id'):
    return False

if operation == Operations.CONFIRM:
    user.confirmed = True
elif operation == Operations.RESET_PASSWORD:
    user.set_password(new_password)
elif operation == Operations.CHANGE_EMAIL:
    new_email = data.get('new_email')
    if new_email is None:
        return False
    if User.query.filter_by(email=new_email).first() is not None:
        return False
    user.email = new_email
else:
    return False

db.session.commit()
return True

def rename_image(old_filename): ext = os.path.splitext(old_filename)[1] new_filename = uuid.uuid4().hex + ext return new_filename

def resize_image(image, filename, base_width): filename, ext = os.path.splitext(filename) img = Image.open(image) if img.size[0] <= base_width: return filename + ext w_percent = (base_width / float(img.size[0])) h_size = int((float(img.size[1]) * float(w_percent))) img = img.resize((base_width, h_size), PIL.Image.ANTIALIAS)

代码语言:javascript
代码运行次数:0
复制
filename += current_app.config['ALBUMY_PHOTO_SUFFIX'][base_width] + ext
img.save(os.path.join(current_app.config['ALBUMY_UPLOAD_PATH'], filename), optimize=True, quality=85)
return filename

def is_safe_url(target): ref_url = urlparse(request.host_url) test_url = urlparse(urljoin(request.host_url, target)) return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc

def redirect_back(default='main.index', **kwargs): for target in request.args.get('next'), request.referrer: if not target: continue if is_safe_url(target): return redirect(target) return redirect(url_for(default, **kwargs))

def flash_errors(form): for field, errors in form.errors.items(): for error in errors: flash(u"Error in the %s field - %s" % ( getattr(form, field).label.text, error ))

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档