python、flask的开发相关问题(flask入门教程、跨域访问、base64解码为图像或wav文件、PIL、CV2和bytes之间格式转换、获取当前日期)

1 篇文章 0 订阅
1 篇文章 0 订阅

1、flask入门上手教程

我主要目的是快速开发,因此学习flask是随便找的一个教程跟着做了下,而没有系统地学习,大概差不多了就去按自己需求进行开发了。

以下是我跟的一个简单教程,讲述了如何快速部署一个简单的python服务器,如何根据域名访问对应资源页面等内容,对我的需求来说足够了

python上手–flask框架web开发实践

2、CORS跨域

上述flask教程前后端是混合的,与本人的设想的前后端分离不符,之后理所当然地遇见了CORS跨域问题

可以通过flask解决跨域问题,需要安装flask-cors 包

pip install -U flask-cors 

然后导入以下工具

from flask_cors import CORS, cross_origin

了解到主要有两种最基本的跨域方式,一是使用CORS函数

CORS(app) #允许所有路由上的所有域的CORS
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})#控制特定资源才能CORS

二是使用@cross_origin装饰器

@app.route("/")
@cross_origin()
def helloWorld():
  return "Hello, cross-origin-world!"

参考:1、https://blog.csdn.net/qq_27664967/article/details/110508524
2、flask—— flask-cors解决跨域问题

3、base64解码为图像

import os
import base64
from io import BytesIO
from PIL import Image

 # 输入为base64格式字符串,输出为PIL格式图片
def base64_to_image(base64_str):  
    image = base64.b64decode(base64_str, altchars=None, validate=False)
    image = BytesIO(image)
    image = Image.open(image)
    return image

在base64转化为图像中,可能会出现转码错误报错:

binascii.Error: Invalid base64-encoded string: number of data characters (7121) cannot be 1 more than a multiple of 4

本人在遇见这个问题时,发现是因为base64字符串中还包含一些其他信息,以下是节选:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4XrS9abdkx3Etdu7UI7rR6MZAEtSjSFGihmVR/uLltez

可以看出,在字符串前还包含

"data:image/png;base64,"

这些描述信息,我猜想上述报错是因为这些信息,故去除后再进行图像转码,最终成功

4、PIL、CV2和bytes之间格式转换

其后我想把PIL格式转换为cv2格式,寻得以下解决方案:

PIL、cv2、bytes三种图片格式相互转换

5、获取当前日期

参考:python获取当前时间日期有哪些方法?

6、将base64解码为wav音频文件

def base64_to_audio(base64_str):  # 用 b.show()可以展示
    audio = base64.b64decode(base64_str, altchars=None, validate=False)
    wavfile = "filename.wav"
    with open(wavfile, "wb") as f:
        f.write(audio)
        return wavfile
    return None

7、TypeError: ‘dict_keys’ object is not subscriptable

使用python的字典的keys()函数时,本以为返回的是个list,想直接通过下标访问,结果报了“TypeError: ‘dict_keys’ object is not subscriptable”错误

原因:dict_keys([‘no surfacing’,‘flippers’]),返回的是一个 dict_keys 对象,不再是 list 类型,也不支持 index 索引

解决方法:强制转成 list 类型即可使用

list(mydict.keys())
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值