文章目录
- postman工具
- get和post
- 如何给路由传参 解析
- @app.route('')这个叫视图函数
- Jinja2模板引擎
- 动态传参
- 注释、变量代码块以及控制代码块的使用
- 注释:ctrl+/
- 变量代码块使用
- 控制代码块的使用 if for等(for循环)
- 过滤器的使用(比如小写转大写,获取第几个字符之类的)
- web表单及验证
- flash消息闪现,给模板传递消息,消息加密(做混淆用)
- 表单样式的显示(使用flask_wtf模板创建表单)
- 模板表单的验证 csrf_token
- Flask中使用SQL数据库 SQLAlchemy(flask_sqlalchemy)(如果是使用mysql数据库,安装flask_mysqldb)
- mysql数据模型的定义 常用SQLAlchemy字段类型/列选项/关系选项
- 数据库基本操作,增删改 db.session
查看虚拟环境
Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\Dontla>virtualenv --version
virtualenv 20.3.1 from d:\20191031_tensorflow_yolov3\python\lib\site-packages\virtualenv\__init__.py
C:\Users\Dontla>
postman工具
get和post
如何给路由传参 解析
@app.route(’’)这个叫视图函数
Jinja2模板引擎
动态传参
flask_template_demo.py
# -*- coding: utf-8 -*-
"""
@File : flask_template_demo.py
@Time : 2021/1/26 16:41
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
url_str = 'www.baidu.com'
return render_template('index.html', url_str=url_str)
if __name__ == '__main__':
app.run()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FLASK TEST</title>
</head>
<body>
这是模板<br>
这是首页<br>
{{url_str}} <br>
</body>
</html>
注释、变量代码块以及控制代码块的使用
注释:ctrl+/
<!---->
变量代码块使用
# -*- coding: utf-8 -*-
"""
@File : flask_template_demo.py
@Time : 2021/1/26 16:41
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
url_str = 'www.baidu.com'
my_list = [1, 2, 3, 4, 5]
my_dict = {
'name': '黑马', 'url': 'www.tencent.com'
}
return render_template('index.html', url_str=url_str, my_list=my_list, my_dict=my_dict)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FLASK TEST</title>
</head>
<body>
这是模板<br>
这是首页<br>
{{url_str}} <br>
{{my_list}} <br>
{{my_list.2}} <br>
{{my_list[2]}} <br>
{{my_dict}} <br>
{{my_dict.name}} <br>
{{my_dict['name']}} <br>
</body>
</html>
控制代码块的使用 if for等(for循环)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FLASK TEST</title>
</head>
<body>
这是模板<br>
这是首页<br>
{{url_str}} <br>
{{my_list}} <br>
{{my_list.2}} <br>
{{my_list[2]}} <br>
{{my_dict}} <br>
{{my_dict.name}} <br>
{{my_dict['name']}} <br>
<hr>
{% for i in my_list %}
{% if i >=3 %}
{{i}} <br>
{% endif %}
{% endfor %}
</body>
</html>
# -*- coding: utf-8 -*-
"""
@File : flask_template_demo.py
@Time : 2021/1/26 16:41
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
url_str = 'www.baidu.com'
my_list = [1, 2, 3, 4, 5]
my_dict = {
'name': '黑马', 'url': 'www.tencent.com'
}
return render_template('index.html', url_str=url_str, my_list=my_list, my_dict=my_dict)
if __name__ == '__main__':
app.run()
过滤器的使用(比如小写转大写,获取第几个字符之类的)
web表单及验证
# -*- coding: utf-8 -*-
"""
@File : flask_WTF.py
@Time : 2021/1/27 14:10
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/', methods=["GET", "POST"])
def index():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
if not all([username, password, password2]):
return '参数不完整'
else:
return 'success'
return render_template('index_WTF.html')
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flask_WTF</title>
</head>
<body>
<form method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<label>确认密码:</label><input type="password" name="password2"><br>
<input type="submit" value="提交"><br>
</form>
</body>
</html>
flash消息闪现,给模板传递消息,消息加密(做混淆用)
flask_WTF.py
# -*- coding: utf-8 -*-
"""
@File : flask_WTF.py
@Time : 2021/1/27 14:10
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash
app = Flask(__name__)
app.secret_key = '12345678' # 随便填
@app.route('/', methods=["GET", "POST"])
def index():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
if not all([username, password, password2]):
# return '参数不完整'
flash('参数不完整')
else:
# return 'success'
return 'sucess'
return render_template('index_WTF.html')
if __name__ == '__main__':
app.run(debug=True)
index_WTF.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flask_WTF</title>
</head>
<body>
<form method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<label>确认密码:</label><input type="password" name="password2"><br>
<input type="submit" value="提交"><br>
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
</body>
</html>
表单样式的显示(使用flask_wtf模板创建表单)
https://www.bilibili.com/video/BV17W41177oE?p=16
# -*- coding: utf-8 -*-
"""
@File : flask_WTF.py
@Time : 2021/1/27 14:10
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, StringField
app = Flask(__name__)
app.secret_key = '12345678' # 随便填
# 自定义表单类
class LoginForm(FlaskForm):
username = StringField('用户名:')
password = PasswordField('密码:')
password2 = PasswordField('确认密码:')
submit = SubmitField('提交')
@app.route('/form', methods=['GET', 'POST'])
def login():
login_form = LoginForm()
# 1. 判断请求方式
if request.method == 'POST':
# 2. 获取请求的参数
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
# 3. 验证参数. WTF可以一句话就实现所有的校验
# 我们没有CSRF token
if login_form.validate_on_submit():
print(username, password)
return 'success'
else:
flash('参数有误')
return render_template('index_WTF.html', form=login_form)
@app.route('/', methods=["GET", "POST"])
def index():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
if not all([username, password, password2]):
# return '参数不完整'
flash('参数不完整')
else:
# return 'success'
return 'sucess'
return render_template('index_WTF.html')
if __name__ == '__main__':
app.run(debug=True)
index_WTF.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flask_WTF</title>
</head>
<body>
<form method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<label>确认密码:</label><input type="password" name="password2"><br>
<input type="submit" value="提交"><br>
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
<hr>
<form method="post">
{{ form.csrf_token() }}
{{ form.username.label }}{{ form.username }} <br>
{{ form.password.label }}{{ form.password }} <br>
{{ form.password2.label }}{{ form.password2 }} <br>
{{ form.submit}} <br>
</form>
</body>
</html>
模板表单的验证 csrf_token
常用验证函数
怎么使用?
老师说validators是复数,所以可以传个列表,这推导??
但这写个tuple是啥意思?反正就是可迭代对象就行?(不能用tuple,会报错,只能用列表)
# -*- coding: utf-8 -*-
"""
@File : flask_WTF.py
@Time : 2021/1/27 14:10
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, StringField
from wtforms.validators import DataRequired, EqualTo
app = Flask(__name__)
app.secret_key = '12345678' # 随便填
# 自定义表单类
class LoginForm(FlaskForm):
username = StringField('用户名:', validators=[DataRequired()])
password = PasswordField('密码:', validators=[DataRequired()])
password2 = PasswordField('确认密码:', validators=[DataRequired(), EqualTo('password', '提示:密码填入不一致')])
submit = SubmitField('提交')
@app.route('/form', methods=['GET', 'POST'])
def login():
login_form = LoginForm()
# 1. 判断请求方式
if request.method == 'POST':
# 2. 获取请求的参数
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
# 3. 验证参数. WTF可以一句话就实现所有的校验
# 我们没有CSRF token
if login_form.validate_on_submit():
print(username, password)
return 'success'
else:
flash('参数有误')
return render_template('index_WTF.html', form=login_form)
@app.route('/', methods=["GET", "POST"])
def index():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
if not all([username, password, password2]):
# return '参数不完整'
flash('参数不完整')
else:
# return 'success'
return 'success'
return render_template('index_WTF.html')
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flask_WTF</title>
</head>
<body>
<form method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<label>确认密码:</label><input type="password" name="password2"><br>
<input type="submit" value="提交"><br>
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
<hr>
<form method="post">
{{ form.csrf_token() }}
{{ form.username.label }}{{ form.username }} <br>
{{ form.password.label }}{{ form.password }} <br>
{{ form.password2.label }}{{ form.password2 }} <br>
{{ form.submit}} <br>
</form>
</body>
</html>
Flask中使用SQL数据库 SQLAlchemy(flask_sqlalchemy)(如果是使用mysql数据库,安装flask_mysqldb)
# -*- coding: utf-8 -*-
"""
@File : flask_sqlalchemy_demo.py
@Time : 2021/2/5 14:49
@Author : Dontla
@Email : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1/flask_sql_demo'
# 跟踪数据库修改 -- 不建议开启(消耗性能,同时未来版本中会移除)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run(debug=False)
在电脑上还要创建sql数据库??
装好了,按照这个安装就行
然后控制台执行命令,登入数据库:
C:\Users\Dontla>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
创建数据库:
mysql> create database flask_demo charset=utf8;
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql>
使用数据库:
mysql> use flask_sql_demo;
Database changed
mysql>
显示数据库表单:
mysql> show tables;
Empty set (0.01 sec)
mysql>
mysql数据模型的定义 常用SQLAlchemy字段类型/列选项/关系选项
表格式:
两个表做两个class
代码看下一节
数据库基本操作,增删改 db.session
我勒个去,应该找个python3的教程的,这个python2很多库用法不支持,替换也替换不了。。。。https://www.bilibili.com/video/BV17W41177oE?p=20&spm_id_from=pageDriver到此为止,再见!