Flask渲染Jinja2模板和传参
渲染模板的方法:render_template()
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
模板实例:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}
- 如何渲染模板
* 模板放在‘templates’文件夹下
* 从‘flask’中导入‘render_template’函数
* 在视图函数中,使用‘render_template’
函数,渲染函数,注意,只需要填写模板的名字,不需要填写‘templates’这个文件夹的路径。 - 模板传参:
* 如果只有一个 或者少量参数,那么直接在‘render_template’函数中添加关键字参数就可以了。
* 如果有多个参数,可以把多个参数放在字典中,参数间以逗号隔开,再在‘render_template’中,添加“**contex”,context是字典名称 - 在模板中,如果要使用一个变量,语法是‘{{params}}’
- 在访问模型中的属性或字典,可以通过‘{{params.property}}’的形式,或者是使用‘{{params[‘age’]}}’
if判断
1.语法:
{% if xxx %}
{% else %}
{% elif %}
for 循环遍历列表和字典
1.字典的遍历,语法和‘Python’一样,可以使用‘items()’,‘keys()’,’itemvalues()’
{% for k,v in user.items() %}
<p>{{ k }}:{{ v }}</p>
{% endfor %}
2.列表的遍历:语法和‘Python’一样
{% for webside in websides %}
<p>{{ webside}}</p>
{% endfor %}
过滤器
1. 介绍和语法:
继承和block
1.继承的作用和语法:
*作用:可以把一些公共的代码放在父模板中,避免每个模板编写同样的代码。
*语法:
{% extends 'base.html' %}
2.block实现:
*作用:可以让子模板实现一些自己的需求。父模板需要提前定义好。
*注意点:子模板中的代码,必须放在block块中。
url链接:使用‘url_for(视图函数名称)’可以反转成url
Flask-SQLAlchemy的介绍与安装:
1. ORM:Object Relationship Mapping(模型关系映射)
2. flask-sqlalchemy是一套ORM框架
3. ORM的好处:可以让我们操作数据库跟操作对象一样,一个表就抽象成一个类,一条数据。
Flask-SQLAlchemy的使用:
1.初始化和设置数据库配置信息:
* 使用flask_sqlalchemy中的SQLAlchemy进行初始化:
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
2.设置配置信息:在‘config.py’文件中添加亦喜爱的配置信息:
# dialect+driver://username:password@host:port/database
DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = '229894'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo2'
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,
USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
3.在主‘app’文件中,添加配置文件:
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
- 做测试:
db.create_all()
使用Flask-SQLAlchem创建模型与表的映射:
1.模型需继承‘db.Model’,然后需要映射到表中的属性,必须写成‘db.Column’的数据类型。
2. 数据类型:
* ‘db.Integer’代表的是整形;
* ‘db.String’代表的士‘varchar’,需要指定最长的长度;
* ‘db.Text’代表的士‘text’
3.其他参数:
*‘primary_key’:代表的是将这个字段设置为主键;
* ‘autoincrement’:代表的士这个主键为自增长的;
* ‘nullable’:代表的士这个字段是否为空,默认 可以为空;若设置为False,则不可为空。
4.最后需调用‘db.create_all’来将模型真正的映射到数据库中。
Flask-SQLAlchemy数据的增,删,该,查:
1.增:
#增加:
article1 = Article(title='aaa',content='bbb')
db.session.add(article1)
#事务
db.session.commit()
2.查:
# 查
# select * form article where title = 'aaa';
article1 = Article.query.filter(Article.title == 'aaa').first()
print 'title:%s' % article1.title
print 'content:%s' % article1.content
3.改:
# 改:
# 1.先把要更改的数据查找出来
article1 = Article.query.filter(Article.title == 'aaa').first()
# 2.把这条数据,你需要修改的地方进行修改
article1.title = 'symon'
# 3.做事务的提交
db.session.commit()
4.删:
# 删:
# 1.把需要删除的数据查找出来
article1 = Article.query.filter(Article.content == 'bbb').first()
# 2.把这条数据删除掉
db.session.delete(article1)
# 3.做事务提交
db.session.commit()
分开‘models’以及解决循环引用
1. 分开models的目的:为了让代码更加方便的管理。
2. 如何解决循环引用:把‘db’放在一个单独的文件中,切断循环引用的线条就可以了。
Flask-Migrate的介绍与安装:
1. 介绍:因为采用‘db_create_all’在后期修改字段的时候,不会自动的映射到数据库中,必须先删除表在重新运行‘db.create_all’,这样不符合需求。因此flask_migrate就是为了解决这个问题。
2. 安装flask_migrate
3. 使用flask-migrate必须借助‘flask_scripts’这个包的‘MigrateCommand’中包含了所有和数据库相关的命令。
4. ‘flask_migrate’相关的命令:
* ‘python manage.py db init’:初始化一个迁移脚本的环境,只需要执行一次。
* ‘Python manage.py db migrate’:将模型更改了,就需要执行一遍这个命令。
* ‘python manage.py db upgrade’:将迁移文件真正映射到数据库中。每次运行了‘migrate’命令后,就记得要运行这个命令。
5. 注意点:需要将你想要映射到数据库的中模型,都要导入到‘manage.py’文件中,如果没有导入进去,就不会映射导数据库中。
6. ‘manager.py’的相关代码:
from flask_script import Manager
from migrate_demo import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Article
# init
# migrate
# upgrate
#模型 —> 迁移文件 ——> 表
manager = Manager(app)
#1.要使用flask_migrate,必须使用app和db
migrate = Migrate(app,db)
#2.把MigrateCommand命令添加到manager中
manager.add_command('db',MigrateCommand)
if __name__ == '__main__':
manager.run()