前言:
我的笔记持续在notion更新,欢迎观看交流,求star~
https://www.notion.so/FLASK-STUDY-NOTE-897db25a787a4f85a05034a54a7925d3
C:\path\to\app>set FLASK_APP=hello.py (你的项目名.py)
C:\path\to\app>flask run
如果你需要让你的服务器公开,可以在运行时添加代码:
flask run --host=0.0.0.0
如果你打开 调试模式,那么服务器会在修改应用代码之后自动重启,并且当应用出错时还会提供一个 有用的调试器。
如果需要打开所有开发功能(包括调试模式),那么要在运行服务器之前导出 FLASK_ENV
环境变量并把其设置为 development
:
set FLASK_ENV=development
flask run
还可以通过导出 FLASK_DEBUG=1
来单独控制调试模式的开关。
使用 **[route()](https://flask.net.cn/api.html#flask.Flask.route)
**装饰器来把函数绑定到 URL:
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
**[url_for()](https://flask.net.cn/api.html#flask.url_for)
**函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。
from flask import Flask, escape, url_for
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/')
def profile(username):
return '{}\'s profile'.format(escape(username)) #replace the character from {} to escape()
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
Web 应用使用不同的 HTTP 方法处理 URL 。当你使用 Flask 时,应当熟悉 HTTP 方法。 缺省情况下,一个路由只回应 GET
请求。 可以使用 **[route()](https://flask.net.cn/api.html#flask.Flask.route)
**装饰器的 methods
参数来处理不同的 HTTP 方法:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
我们一般使用static文件夹放置项目的CSS和JavaScript文件
使用特定的 'static'
端点就可以生成相应的 URL
url_for('static', filename='style.css')
这个静态文件在文件系统中的位置应该是 static/style.css
使用 **[render_template()](https://flask.net.cn/api.html#flask.render_template)
**方法可以渲染模板,你只要提供模板名称和需要 作为参数传递给模板的变量就行了。下面是一个简单的模板渲染例子:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/')
def hello(name=None):
return render_template('hello.html', name=name)
Flask 会在 templates
文件夹内寻找模板。因此,如果你的应用是一个模块, 那么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:
情形 1: 一个模块:
/application.py
/templates
/hello.html
情形 2: 一个包:
/application
/__init__.py
/templates
/hello.html
更多模板使用/list方法:Template Designer Documentation — Jinja Documentation (3.1.x) (palletsprojects.com)
enctype="multipart/form-data"
属性files
file
**对象一样,另外多出一个 用于把上传文件保存到服务器的文件系统中的 **[save()](https://werkzeug.palletsprojects.com/en/0.15.x/datastructures/#werkzeug.datastructures.FileStorage.save)
**方法。[secure_filename()](https://werkzeug.palletsprojects.com/en/0.15.x/utils/#werkzeug.utils.secure_filename)
**函数:from flask import request
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/' + secure_filename(f.filename))
...
for more:上传文件_Flask中文网