创建一个utils/JwtTools.py文件夹
import jwt
class JwtTool():
def valid(self, token):
secret_key = current_app.config.get('SECRET_KEY')
try:
time.sleep(2)
payload = jwt.decode(token, secret_key, algorithms='HS256')
print(payload)
return payload
except Exception as e:
print(e)
return False
写入登录逻辑
@user_bp.before_request
def gz():
req = reqparse.RequestParser()
req.add_argument('token', default='', location='headers')
args = req.parse_args()
token = args['token']
payload = JwtTool().valid(token)
print('========', payload)
if not payload:
uid = 0
else:
uid = payload['id']
g.uid = uid
def login(func):
def warpper(*args, **kwargs):
print('检测登录')
if not g.uid:
return jsonify({'code': 403, 'msg': '用户未登记'})
return func(*args, **kwargs)
return warpper
class UserView(Resource):
@login
def get(self):
user_info = UserModel.query.get(g.uid)
return jsonify({
'code': 200,
'msg': '用户信息获取成功',
'data': {
'username': user_info.username,
'img': user_info.img
}
})
api.add_resource(UserView, '/user')
一个简单上传图片的逻辑
class UploadView(Resource):
def post(self):
key = '1.jpg'
ak = 'qIpsogKsnioK63SvhCDMp*************OGOW4_'
sk = 'Gmg0YLb5QKzQYxAH2Dspi**************U43L5'
q = Auth(ak, sk)
bucket = 'h2111p7123'
token = q.upload_token(bucket, key, 3600)
res = put_file(token, key, './static/1.jpg', version='v2')
if res[0]['key'] == key:
return jsonify({'code': 200, 'msg': '上传成功'})
return jsonify({'code': 400, 'msg': '上传失败'})
api.add_resource(UploadView, '/upload')
封装七牛云上传方法
- 创建一个utils/QiniuTooks.py文件写入代码
from qiniu import Auth, put_file
from flask import current_app
class QiniuTool():
def __init__(self):
ak = current_app.config.get('QINIU_AK')
sk = current_app.config.get('QINIU_SK')
self.q = Auth(ak, sk)
self.bucket_name = current_app.config.get('QINIU_BUCHET_NAME')
def upload(self, localfilepath, newfilename):
"""
上传图片
:param localfilepath: 图片路径
:param newfilename: 上传后的图片名
:return:
"""
token = self.q.upload_token(self.bucket_name, newfilename, 3600)
ser = put_file(token, newfilename, localfilepath, version='v2')
if ser[0]['key'] == newfilename:
return newfilename
return False
if __name__ == '__main__':
from app import app
with app.app_context():
QiniuTool().upload('./../static/1.jpg', 'static/img/1.jpg')
- 在视图中调用
from datetime import datetime
from utils.QiniuTools import QiniuTool
class UploadView(Resource):
def post(self):
img = request.files.get('img')
ext = img.filename.split('.')[-1]
now_time = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
new_name = f'{now_time + str(random.randint(1000,9999))}.{ext}'
save_path = f'static/{new_name}'
img.save(save_path)
res = QiniuTool().upload(save_path, save_path)
if not res:
return jsonify({'code': 400, 'msg': '上传失败'})
user_info = UserModel.query.get(g.uid)
user_info.img = save_path
db.session.commit()
return jsonify({'code': 200, 'msg': '上传成功', 'data': save_path})
api.add_resource(UploadView, '/upload')
- 前端vue使用vant主键
afterRead(file){
var data = new FormData()
data.append('file', file.file)
console.log(data)
this.axios.post('/upload', data)
.then(res =>{
console.log('文字识别的响应:', res.data)
})
},