1.新建目录结构
如下图所示,其中src是其他代码(可无),static是静态资源,template是html文件。
2.创建route.py(路由文件)
关键知识点:
1. template_folder 参数是html文件的文件夹,static_folder 参数是静态资源文件的目录。如果不打包成单独的exe文件,都是相对app目录。如果打包成单独exe,资源文件的位置会发生改变(在windows的temp目录),需要用 resource_path_convert 函数获取真实的路径(C:/xxx/xxx),也可以写成绝对路径。
2. render_template 可以返回一个页面。
3. jsonify 将对象转为json格式发送给前端。
4. send_from_directory 将路径转为磁盘路径发送给前端
from flask
import Flask
, render_template
, request
, send_from_directory
, jsonify
app
= Flask
(__name__
,template_folder
='template',static_folder
='static',static_url_path
='/static')
@app
.route
('/')
def index():
return render_template
("index.html")
@app
.route
('/test',methods
=['GET', 'POST'])
def test():
test
= request
.args
.get
("test")
return jsonify
({
"success": True,
"data": test
})
@app
.route
('/file/<path:filename>')
def custom_static(filename
):
return send_from_directory
('D:\\test\\', filename
)
import logging
log
= logging
.getLogger
('werkzeug')
log
.setLevel
(logging
.WARNING
)
if __name__
== '__main__':
app
.run
(
port
=5000,
debug
=False
)
3.html引入资源文件相对static目录就可以,其他引入类似:
<script src
="static/layer/layer.js"></script
>
4.访问磁盘文件,
<img src
="/file/test.png" />
5.自动打开浏览器
import webbrowser
webbrowser
.open("http://127.0.0.1:5000")
6.局域网的其他设备访问项目
Run->Edit Confugurations,然后修改 Environment variables 为 –host=0.0.0.0 然后将main函数改为:
def get_ip_address():
return [item
[4][0] for item
in socket
.getaddrinfo
(socket
.gethostname
(), None) if ':' not in item
[4][0]][0]
if __name__
== '__main__':
port
= 5000
url
= "http://{0}:{1}".format(get_ip_address
(), port
)
print("其他设备通过"+url
+"访问")
app
.run
(host
='0.0.0.0', port
=port
, debug
=False)
与之前不同的是多了一个host参数,如果仅本地调试可以省略或者127.0.0.1。如果写了 0.0.0.0,就必须修改 Environment variables,否则无法访问。修改后,局域网内的其他设备就可以通过ip冒号加端口形式访问。
7.打包
请看我的另一个文章https://blog.csdn.net/qq_46269068/article/details/108376581
8.整合最小数据库sqlite
请看我的另一个文章https://blog.csdn.net/qq_46269068/article/details/108377309