python flask项目开发入门+打包+sqlite(所有问题汇总)

tech2022-09-20  70

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

最新回复(0)