flask_笔记
1.1Hello World
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
1.2路由
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello_world():
return '<h1>Hello, World!<h1>'
@app.route('/hi')
def hi():
return '<h1>hi, hi!<h1>'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
@app.route('/hello',methods=['GET','POST'],endpoint='hello')
def hello_world():
return '<h1>Hello, World!<h1>'
@app.route('/hi',methods=['GET','POST'],endpoint='hi')
def hi():
return '<h1>hi, hi!<h1>'
if __name__ == '__main__':
app.run()
1.3变量规则
from flask import Flask
app = Flask(__name__)
@app.route('/user/<id>')
def index(id):
if id == '1':
return 'python'
if id == str(2):
return 'java'
if int(id) == 3:
return 'flask'
return 'hello world'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
# path 接受包含任何斜杠的文本
# string接受不包含任何斜杠的文本
# int 接收正整数
#float 接收正浮点数
@app.route('/user/<int:id>')
def index(id):
if id == '1':
return 'python'
if id == 2:
return 'java'
if id == 3:
return 'flask'
return 'hello world'
if __name__ == '__main__':
app.run()
from flask import Flask
app = Flask(__name__)
@app.route('/user/<float:id>')
def index(id):
if id == 1.1:
return 'python'
if id == 2.2:
return 'java'
if id == 3.3:
return 'flask'
return 'hello world'
if __name__ == '__main__':
app.run()
1.4自定义转化器
from werkzeug.routing import BaseConverter
from flask import Flask
app = Flask(__name__)
class RegexConverter(BaseConverter):
def __init__(self,url_map,regex):
super(RegexConverter,self).__init__(url_map)
self.regex = regex
def to_python(self,value):
print('to_python方法被调用')
return value
app.url_map.converters['re'] = RegexConverter
# <re("1\d{10}"):vlaue> 首字母开头有10位
@app.route('/index/<re("123"):vlaue>')
def index(vlaue):
return 'hello world'
if __name__ == '__main__':
app.run()
2.1渲染form表单
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
账号
<br> # 换行
<input type ="text" name="name">
密码
<br> # 换行
<input type ="password" name="password">
<br> # 换行
<input type ="submit" name="submit">
</form>
</body>
</html>
2.2request对象
request包含前端发送的所有数据
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')
if request.method == 'POST':
name = request.form.get('name')
password = request.form.get('password')
print(name,password)
return 'this is post'
if __name__ == '__main__':
app.run()
2.2重定向
from flask import Flask,redirect,url_for
app = Flask(__name__)
@app.route('/index')
def index():
return redirect(url_for('hello'))
# redirect :重定向
@app.route('/baidu')
def baidu():
return redirect('https://www.baidu.com')
# url_for :链接到 hello
@app.route('/')
def hello():
return 'this is hello fun'
if __name__ == '__main__':
app.run()
2.3返回json数据给前端
前后端的数据交互 使用的是json数据
from flask import Flask,make_response,json,jsonify
app = Flask(__name__)
app.config['JSON_AS_ASCII']=False
@app.route('/index')
def index():
data = {
'name':'张三'
}
# response = make_response(json.dumps(data,ensure_ascii = False)) # 接收json数据,关闭ensure_ascii
# response.mimetype = 'application/json'
# return response
return jsonify(data)
if __name__ == '__main__':
app.run()
2.4 abort函数
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,abort,request,make_response,render_template
app = Flask(__name__)
@app.route('/index',methods=['GET','POST'])
def index():
if request.method=='GET':
return render_template('index.html')
if request.method=='POST':
name = request.form.get('name')
password = request.form.get('password')
if name=='zhangsan' and password=='123':
return 'login success'
else:
abort(404)
return None
if __name__ == '__main__':
app.run()
2.5 自定义异常
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,abort,request,make_response,render_template
app = Flask(__name__)
@app.route('/index',methods=['GET','POST'])
def index():
if request.method=='GET':
return render_template('index.html')
if request.method=='POST':
name = request.form.get('name')
password = request.form.get('password')
if name=='zhangsan' and password=='123':
return 'login success'
else:
abort(404)
return None
#错误控制器
@app.errorhandler(404)
def handle_404_error(err):
return render_template('404.html')
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="../static/a123.jpg" aly="" width="873px" height="626px">
</body>
</html>
2.6 模板的基本使用
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
data = {
'name':'张三',
'age':18,
'mylist':[1,2,3,4,5,6]
}
return render_template('index2.html',data=data)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world
<br>
{{ data }}
<br>
{{ data['name'] }}
<br>
{{ data.name }}
<br>
mylist:{{ data.mylist }}
<br>
mylist:{{ data.mylist[1] }}
<br>
count:{{ data.mylist[1]+data.mylist[2] }}
</body>
</html>
2.7 过滤器
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
data = {
'name':'张三',
'age':18,
'mylist':[1,2,3,4,5,6]
}
return render_template('index2.html',data=data)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world
<br>
{{'hello_world' | upper}}
<br>
{{'hello_world' | replace('hello','hi')}}
</body>
</html>
2.8 自定义过滤器
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
data = {
'name':'张三',
'age':18,
'mylist':[1,2,3,4,5,6]
}
return render_template('index2.html',data=data)
#自定义过滤器
def list_step(li):
return li[::2]
app.add_template_filter(list_step,'li2')
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world
<br>
{{'hello_world' | upper}}
<br>
{{'hello_world' | replace('hello','hi')}}
<br>
mylist列表:{{data.mylist | li2}}
</body>
</html>
3.1 定义表单模型类
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField #类型
from wtforms.validators import DataRequired,EqualTo #验证数据是否为空,验证数据是否相同
app = Flask(__name__)
# 定义表单模型类
class Register(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')
def register():
#创建表单对象
form = Register()
return render_template('register.html')
if __name__ == '__main__':
app.run()
// An highlighted block
var foo = 'bar';
3.2 使用flask表单
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template,request
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField #类型
from wtforms.validators import DataRequired,EqualTo #验证数据是否为空,验证数据是否相同
app = Flask(__name__)
app.config['SECRET_KEY']='ADJAJDA'
# 定义表单模型类
class Register(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 = Register()
if request.method == 'GET':
return render_template('register.html',form=form)
if request.method == 'POST':
username = form.user_name.data
password = form.password.data
password2 = form.password2.data
print('username:',username)
print('password:',password)
print('password2:',password2)
return render_template('register.html',form=form)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<br>
{{ form.user_name.label }}
{{ form.user_name }}
<br>
{{ form.password.label }}
{{ form.password }}
<br>
{{ form.password2.label }}
{{ form.password2 }}
<br>
{{ form.submit.label }}
{{ form.submit }}
</form>
</body>
</html>
3.3 验证器 validate_on_submit
#表单传入的数据 如果正确的话在执行操作
#raise 主动抛出异常
#abort 在网页中主动抛出异常
from flask import Flask,render_template,request
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField #类型
from wtforms.validators import DataRequired,EqualTo #验证数据是否为空,验证数据是否相同
app = Flask(__name__)
app.config['SECRET_KEY']='ADJAJDA'
# 定义表单模型类
class Register(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 = Register()
if request.method == 'GET':
return render_template('register.html',form=form)
if request.method == 'POST':
if form.validate_on_submit():
username = form.user_name.data
password = form.password.data
password2 = form.password2.data
print('username:',username)
print('password:',password)
print('password2:',password2)
else:
print('验证失败')
return render_template('register.html',form=form)
if __name__ == '__main__':
app.run()