p>一,环境
宿主机和客户机都是如下:
$ cat /etc/issue
Ubuntu 20.04.2 LTS n l
$ uname -a
Linux lenky-HP 5.10.0-1057-oem #61-Ubuntu SMP Thu Jan 13 15:06:11 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
二,安装软件
$ sudo apt-get update
$ sudo apt install python3-pip
$ sudo pip3 install Flask
三,测试
$ mkdir Flask
$ cd Flask/
$ vi server.py
$ cat server.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
$ python3 server.py
在另外一个终端执行:
$ wget -q -O – http://127.0.0.1:5000
Hello World!
运行ok。
四,发送静态资源
一般的简单内容输出可以通过Python代码返回,类似于上面的hello_world()函数。
如果要输出各种静态资源,怎么做呢?
方法一:render_template
参考:https://flask.palletsprojects.com/en/2.1.x/api/?highlight=render_template#flask.render_template
Flask默认使用static目录存放静态资源,templates目录存放模板,这两个目录可以通过设置参数更改的:
app = Flask(“admin-center”, static_folder=”js”, template_folder=”admin”)
lenky@lenky-HP:Flask$ tree . ├── admin │ └── index.html ├── js │ └── admin.js └── server.py 2 directories, 3 files lenky@lenky-HP:Flask$ cat server.py from flask import Flask from flask import render_template app = Flask("admin-center", static_folder="js", template_folder="admin") @app.route('/') def hello_world(): return 'Hello World!' @app.route('/admin') def admin(): return render_template("index.html") if __name__ == '__main__': app.run() lenky@lenky-HP:Flask$ cat admin/index.html <html> <head> <title>admin-center</title> <meta charset="utf-8"> <script src="../js/admin.js"></script> </head> <body onload="test()"> </body> </html> lenky@lenky-HP:Flask$ cat js/admin.js function test() { alert('test'); }
启动server.py后,浏览器访问http://127.0.0.1:5000/admin,正常获得弹窗test,ok。
注意:另外有个很重要的参数static_url_path可以改变static文件夹的映射uri地址。
比如上面的:app = Flask(“admin-center”, static_folder=”js”, template_folder=”admin”)
正常情况下,js下文件的uri为:js/admin.js,如果加上static_url_path参数如下:
app = Flask(“admin-center”, static_folder=”js”, static_url_path=”/”, template_folder=”admin”)
那么admin.js对应的uri就是:/admin.js
这在某些情况下特别有用,比如前端静态文件都是由别人提供的时候,比如前端同事用vue框架开发了前端,打包成到文件夹dist下,那么:
app = Flask(“admin-center”, static_folder=”dist”, static_url_path=”/”, template_folder=”dist”)
然后
@app.route(‘/’)
def admin():
return render_template(“index.html”)
即可展示dist下的前端代码。
方法二:send_from_directory
参考:https://flask.palletsprojects.com/en/2.1.x/api/?highlight=render_template#flask.send_from_directory
如果有多个静态路径,那么可以使用send_from_directory,方法如下。
lenky@lenky-HP:Flask$ cat server2.py from flask import Flask from flask import send_from_directory import os.path app = Flask("dist") dist_path = os.path.join(app.root_path, 'dist') @app.route("/dist/<path:filename>") def dist(filename): return send_from_directory(dist_path, filename, as_attachment=False) theme_path = os.path.join(app.root_path, 'dist/theme') @app.route("/theme/<path:filename>") def theme(filename): return send_from_directory(theme_path, filename, as_attachment=False) if __name__ == '__main__': app.run()
send_from_directory主要是用来下载文件的,as_attachment需设置为False。
参考:
https://flask.palletsprojects.com/en/2.1.x/
https://github.com/pallets/flask
网友评论已有0条评论, 我也要评论