Flask基础知识

来源:互联网 发布:如何两个人练口语 知乎 编辑:程序博客网 时间:2024/06/04 00:59

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 %}
  1. 如何渲染模板
    * 模板放在‘templates’文件夹下
    * 从‘flask’中导入‘render_template’函数
    * 在视图函数中,使用‘render_template’
    函数,渲染函数,注意,只需要填写模板的名字,不需要填写‘templates’这个文件夹的路径。
  2. 模板传参:
    * 如果只有一个 或者少量参数,那么直接在‘render_template’函数中添加关键字参数就可以了。
    * 如果有多个参数,可以把多个参数放在字典中,参数间以逗号隔开,再在‘render_template’中,添加“**contex”,context是字典名称
  3. 在模板中,如果要使用一个变量,语法是‘{{params}}’
  4. 在访问模型中的属性或字典,可以通过‘{{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 SQLAlchemyimport configapp = Flask(__name__)app.config.from_object(config)db = SQLAlchemy(app)

2.设置配置信息:在‘config.py’文件中添加亦喜爱的配置信息:

# dialect+driver://username:password@host:port/databaseDIALECT = '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)
  1. 做测试:
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 Managerfrom migrate_demo import appfrom flask_migrate import  Migrate,MigrateCommandfrom exts import dbfrom models import Article# init# migrate# upgrate#模型  —>  迁移文件  ——> 表manager = Manager(app)#1.要使用flask_migrate,必须使用app和dbmigrate = Migrate(app,db)#2.把MigrateCommand命令添加到manager中manager.add_command('db',MigrateCommand)if __name__ == '__main__':    manager.run()
原创粉丝点击