前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python sdk flask框架实现web访问时favicon.ico 404 这样解决

python sdk flask框架实现web访问时favicon.ico 404 这样解决

原创
作者头像
Windows技术交流
修改2020-03-26 01:53:36
3.4K0
修改2020-03-26 01:53:36
举报
文章被收录于专栏:Windows技术交流Windows技术交流

Django、Flask、Bottle都是Python Web框架,Django比较大众化、Flask比较轻量、Bottle比Flask还轻量。

创建空白Flask Web项目

注意看箭头所指,需要点一下创建虚拟环境

再注意看上图左下有个unresolved import flask的告警

这个告警的原因是还没有安装flask框架

如下图,通过PyPI安装,安装之前需要先配置pip国内源,要不然慢死了

输入包名自动出来安装命令,点一下命令自动安装

输入包名自动出来安装命令,点一下命令自动安装,安装过程在左下方输出栏有显示

安装完flask了,最初的那个unresolved import 'flask'的告警依旧在,但此时环境已配置好了,先忽略那个告警,点绿色小三角Web服务器图标进行调试

出来Hello World!说明环境配通了

至于那个unresolved import 'flask'的告警,你把项目保存、关闭、重新打开,发现那个告警自动消失了,但你注意看console最后一行的后半部分是 /favicon.ico 404

谷歌浏览器F12对网页刷新的时候,很多站点都没有favicon.ico,这无关紧要,但我就是别扭

查了很多资料,走了很多弯路,最终找到一篇文档完美解决了favicon.ico 404 not found的问题,文档:https://www.jianshu.com/p/02980943ed81

这篇里的第2种办法也有用https://flask.palletsprojects.com/en/1.1.x/patterns/favicon/

两种办法都可以

然后就是应用Python SDK了,把api explorer工具生成的python console代码全部粘贴到flask项目app.py的开头第一句话from flask import Flask的后面,然后调试发现console端已经出结果了,但我们要的是网页上出结果,而不是显示"Hello World!"

终端显示结果最关键的一句话是print(resp.to_json_string()) ,网页显示Hello World!是因为hello()里的return "Hello World!"

那我们用return resp.to_json_string()替换return "Hello World!"即可

如图,Web呈现结果的目标已经达成,美中不足的是/favicon.ico 404,我们把之前提到的解决/favicon.ico 404的代码加到下图2句话之间测试看看

代码语言:javascript
复制
@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

注意分析代码里面的app.root_path,这个就是app.py所在目录,不用具体写出来,就用app.root_path表示,app.root_path有个static目录里面有个mimetype为'image/vnd.microsoft.icon'的favicon.ico

整个代码说白了就一句话,当访问/favicon.ico时,发送“根目录/static/favicon.ico”作为返回值

代码语言:javascript
复制
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

app.add_url_rule('/favicon.ico',view_func=favicon)

加上代码预览时报NameError: name 'send_from_directory' is not defined

需要参考https://flask.palletsprojects.com/en/1.1.x/patterns/favicon/

在开头加上

import os from flask import send_from_directory

加上后再预览发现不报刚才的错了,但是/favicon.ico 404依然存在?如果你没在app.py所在目录建static目录并在static目录里放favicon.ico的话肯定是404。

让./static/favicon.ico存在后再预览就正常了

注意看网页上出现ico图标了,但是还有个不完美的地方,端口是随机的,可代码里明明是写死的呀

这里的随机端口是调试器属性里给写死了host为localhost,端口没指定就是随机的

如果我们想要从代码指定,那需要做:界面最上排的调试→flask属性→调试→删掉localhost使整个调试配置为空

然后将最后一段代码做些修改,一段并一行,红框里的几行代码用app.run(host='0.0.0.0', port=80,debug=False)替代

debug=True或False都行,最终的结果如下,localhost或外网IP或127.0.0.1都可以,而且是固定端口,这才是我要的东西

最后,再强调一点--安全意识!

就在测试的当儿,Web服务就被刷了,网络攻击无处不在,云规则第一条:云是方便的、也是不安全的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档