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
# 开发环境或不将资源文件打包成单独exe时
app = Flask(__name__,template_folder='template',static_folder='static',static_url_path='/static')
# 打包成单独exe后资源文件的位置会改变,配合resource_path_convert函数获取真实路径
#def resource_path_convert(relative_path):
# if getattr(sys, 'frozen', False):
# base_path = sys._MEIPASS
# else:
# base_path = os.path.abspath(".")
# return os.path.join(base_path, relative_path)
#app = Flask(__name__,
# template_folder=resource_path_convert('template'),
# static_folder=resource_path_convert('static'),
# static_url_path='/static')
# 返回页面
@app.route('/')
def index():
return render_template("index.html")
# 返回数据,methods可以省略
@app.route('/test',methods=['GET', 'POST'])
def test():
# 获取请求参数
test = request.args.get("test")
# return "收到" + test
return jsonify({
"success": True,
"data": test
})
# 访问磁盘文件
@app.route('/file/<path:filename>')
def custom_static(filename):
return send_from_directory('D:\\test\\', filename)
# 不显示access日志
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