Flask框架
安装
Hello World
from flask import Flask
app = Flask(__name__)
@app.route("/") def hello_world(): return "<p>Hello, World!</p>"
|
路由跳转
路由变量规则 <>:提取参数
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=['GET','POST']) def hello_world(): return "<h1>Hello, World!</h1>" @app.route("/chat/<int:id>") def chat(id): if id == 1: return 'python' if id == 2: return 'JAVA' return 'chat'
if __name__ == '__main__': app.run()
|
当访问http://127.0.0.1:5000/chat/1
会返回python
,http://127.0.0.1:5000/chat/2
会返回JAVA
\可接收不同类型参数
- int:接收整型
- string:接收任何不包括斜杠的文本
- float:接收浮点数
- path:接收包含斜杠的文本
请求与响应
现在当前文件夹创建一个文件夹templates
,在里面新建index.html,结构如下:

from flask import Flask, render_template
app = Flask(__name__) @app.route('/index') def index(): return render_template('index.html')
if __name__ == '__main__': app.run()
|
进入:http://127.0.0.1:5000/index,可访问
表单采用post提交
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="" method="post"> 用户名: <input type="text" name="username" placeholder="用户名"><br> 密码: <input type="password" name="password" placeholder="密码"><br> <input type="submit" value="登录"> </form> </body> </html>
|
app.py
from flask import Flask, render_template, request
app = Flask(__name__) @app.route('/index', methods=['GET', 'POST']) def index(): if request.method == 'GET': return render_template('index.html') elif request.method == 'POST': name = request.form.get('username') password = request.form.get('password') return 'hello %s,your password is: %s!' % (name, password)
if __name__ == '__main__': app.run()
|
重定向 302
使用redirect
重定向到百度
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/index') def index(): return redirect('http://www.baidu.com')
if __name__ == '__main__': app.run()
|
重定向到本地路由
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/index') def index(): return redirect(url_for('hello'))
@app.route('/') def hello(): return 'Hello, World!'
if __name__ == '__main__': app.run()
|
使用JSON返回
from flask import Flask, make_response, jsonify
app = Flask(__name__)
@app.route('/index') def index(): data = { 'name': '你好呀', } return jsonify(data) if __name__ == '__main__': app.run()
|
jsonify
返回 json 格式
abort函数(抛异常)
abort的常见异常值:401、403、404
from flask import Flask, abort, request, make_response, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'GET': return render_template('index.html') if request.method == 'POST': name = request.form.get('username') password = request.form.get('password') if name == 'admin' and password == '123456': return 'Login success' else: abort(404) return None
if __name__ == '__main__': app.run()
|
自定义异常
捕捉页面404异常
from flask import Flask, abort, request, make_response, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'GET': return render_template('index.html') if request.method == 'POST': name = request.form.get('username') password = request.form.get('password') if name == 'admin' and password == '123456': return 'Login success' else: abort(404) return None
@app.errorhandler(404) def handle_404_error(error): return render_template('404.html')
if __name__ == '__main__': app.run()
|
模板使用(jinja2)
@app.route('/index') def index(): data = { 'title': 'Home', 'heading': 'Welcome to my Flask app!', 'mylist': [1, 2, 3, 4, 5] } return render_template('index2.html', data=data)
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index2</title> </head> <body> {{ data['title'] }} 使用{{}}拿去数据 <br> {{ data.title }} <br> mylist:{{ data.mylist }} count:{{ data.mylist[1] + data.mylist[2] }} 在{{}}中可以运算 </body> </html>
|
过滤器
{{ 'hello_world' | upper }} 使用''表示显示一个字符换 upper将前面的字母转为大写
|
过滤器 |
描述 |
abs(value) |
返回一个数值的绝对值。 例如:-1 |
default(value,default_value,boolean=false) |
判断变量的值 |
escape(value) 或 e |
转义字符,会将<、>等符号转义成HTML中的符号。 |
first(value) |
返回一个序列的第一个元素。names |
format(value,arags,*kwargs) |
格式化字符串。 |
length(value) |
返回一个序列或者字典的长度。 |
join(value,d=’+’) |
将一个序列用d这个参数的值拼接成字符串。 |
upper(value) |
将字符串转换为大写。 |
lower(value) |
将字符串转换为小写。 |
string(value) |
将变量转换成字符串。 |
wordcount(s) |
计算一个长字符串中单词的个数。 |
也可以自定义过滤器,自定义过滤器
后端表单验证
from flask import Flask, render_template, request from wtforms import StringField, PasswordField, SubmitField from flask_wtf import FlaskForm from wtforms.validators import DataRequired, EqualTo
app = Flask(__name__) app.config['SECRET_KEY'] = '12345678'
class RegisterForm(FlaskForm): """自定义的注册表单模型类""" user_name = StringField(label='用户名', validators=[DataRequired('用户名不能为空')]) password = PasswordField(label='密码', validators=[DataRequired('密码不能为空')]) password2 = PasswordField(label='确认密码', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField(label='提交')
@app.route('/register', methods=['GET', 'POST']) def register(): form = RegisterForm() if request.method == 'GET': return render_template('register.html', form=form) if request.method == 'POST': username = form.user_name.data password = form.password.data return 'success'+'\t'+username+'\t'+password
if __name__ == '__main__': app.run()
|
register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> {{ form.user_name.label }} {{ form.user_name }} <br> {{ form.password.label }} {{ form.password }} <br> {{ form.password2.label }} {{ form.password2 }} <br> {{ form.submit }} </form> </body> </html>
|