Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架。
Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。
Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。
Werkzeug是一个WSGI工具包,实现了请求,响应对象和实用函数。
virtualenv是一个虚拟的Python环境构建器。它可以帮助用户并行创建多个Python环境。 因此,它可以避免不同版本的库之间的兼容性问题。
以下命令用于安装virtualenv:
pip install virtualenv
在这个环境中安装Flask:
pip install Flask
示例
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '你好'
if __name__ == '__main__':
app.run()
可填参数
app.run(host, port, debug, options)
host默认为127.0.0.1(localhost)。设置为“0.0.0.0”以使服务器在外部可用
port默认值为5000
【调试模式】代码可以实时修改
app.debug = True
app.run()
另一种是作为 run 方法的一个参数传入:
app.run(debug=True)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()
Jinja2 模板引擎,使用 render_template() 方法来渲染模板
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<int:postID>')
def hello(name=None):
return render_template('hello.html', name=name)
包括int、float、path接受用作目录分隔符的斜杠
情况 1: 模块:
/application.py
/templates
/hello.html
情况 2: 包:
/application
/__init__.py
/templates
/hello.html
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
在模板里,你也可以访问 request 、 session 和 g [1] 对象, 以及 get_flashed_messages() 函数。
在Jinja2模板中,我们用{{ name }}表示一个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在Jinja2中,用{% ... %}表示指令。
重定向
return redirect(url_for('login'))
安装
Flask-Session flask-sqlalchemy
pip install flask-sockets
pip install psutil
ps -ef|grep py
pip
yum -y install python-pip
pip install --upgrade pip
日志
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
模板
{{ url_for('static', filename='style.css') }}
url_for("函数也可以")
from flask import Flask,render_template
return render_template("hello.html")
Jinja2模板引擎使用以下分隔符从HTML转义。
{% ... %}用于语句
{{ ... }}用于表达式可以打印到模板输出
{# ... #}用于未包含在模板输出中的注释
#... ##用于行语句
{{ url_for('static', filename = 'hello.js') }}
Request对象
result = request.form
字典
{% for key, value in result.items() %}
request.method == 'POST'
resp = make_response(render_template('readcookie.html'))
resp.set_cookie('userID', user)
name = request.cookies.get('userID')
例如,要设置一个'username'会话变量,请使用以下语句:
Session['username'] = 'admin'
要释放会话变量,请使用pop()方法。
session.pop('username', None)
session['username'] = request.form['username']
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'any random string'
Flask.abort(code)
- Code参数采用以下值之一:
- 400 - 用于错误请求
- 401 - 用于未身份验证的
- 403 - Forbidden
- 404 - 未不到
- 406 - 表示不接受
- 415 - 用于不支持的媒体类型
- 429 - 请求过多
if request.form['username'] == 'admin' :
return redirect(url_for('success'))
else:
abort(401)
上传
enctype = "multipart/form-data"
from flask import Flask, render_template, request
from werkzeug import secure_filename
f = request.files['file']
f.save(secure_filename(f.filename))
app.config[‘UPLOAD_FOLDER’] 定义上传文件夹的路径 app.config[‘MAX_CONTENT_PATH’] 指定要上传的文件的最大大小(以字节为单位)
邮件
pip install Flask-Mail
from flask_mail import Mail, Message
app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'yourId@gmail.com'
app.config['MAIL_PASSWORD'] = '*****'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app)
msg = Message('Hello', sender = 'yourId@gmail.com', recipients = ['id1@gmail.com'])
msg.body = "This is the email body"
mail.send(msg)
调试
print('你好', file=sys.stderr)
print(userInfo, file=sys.stderr)
print('你好', file=sys.stderr)