Flask框架
本文最后更新于:2025年4月29日 下午
Flask 框架
安装
pip install Flask
Hello World
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
if __name__ == '__main__':
app.run()
路由跳转
路由变量规则 <>:提取参数
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:id>**可接收不同类型参数
- 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():
# 如果是GET请求,则渲染index.html模板
if request.method == 'GET':
return render_template('index.html')
# 如果是POST请求,则获取表单数据,计算结果并返回
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 make_response(data)
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) # 将data传入html中
<!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>
Flask框架
https://junyyds.top/2023/05/23/Flask框架/