flask
flask
1.基础配置
初始化
from flask import Flask
app=Flask(__name__,static_url_path='/s',static_folder='statics')
#这里面的__name__指名程序所在的包或模块
#static_url_path='/s' 可以不传,默认为 /+static_folder
#static_folder='statics' 静态文件存储的文件夹,可以不传,默认为static
#template_folder 模板文件存储的文件夹,可以不传,默认为templates
集中管理项目所有配置信息
使用方式:Flask将配置信息保存到了app . config属性中,该属性可以按照字典类型进行操作。
读取:·
#方式1
app.config.get(name)
#方式2
app.config[name]
设置:
方式1:
#从配置对象中加载
#app.config.from_object(配置对象)
class DefaultConfig(object):
'''默认配置'''
SECRET_KEY='gldkrterlkfj'
app=Flask(__name__)
app.config.from_object(DefaultConfig)
方式2:
#从配置文件中加载
#app.config.from_pyfile(配置文件)
新建一个配置文件setting.py
SECRET_KEY='gldkrterlkfj'
在Flask程序中
app=Flask(__name__)
app.config.from_pyfile("setting.py")
@app.route("/")
def index():
print(app.config["SECRET_KEY"])
return "aaaa"
指定路由的请求方式
@app.route("/test",methods=["POST","GET"])
def test():
return "hello"
蓝图的使用
在同一个模块中创建蓝图
from flask import Flask
from flask import Blueprint
app=Flask(__name__)
#创建蓝图对象
test_bp=Blueprint("test",__name__)
#注册蓝图
app.register_blueprint(test_bp,url_prefix="/user")
@test_bp.route("/test")
def test():
return "aaaaa"
新建模块创建蓝图
目录结构如图所示:

app.test下
# _init_.py
from flask import Blueprint
#创建蓝图对象
test_bp=Blueprint("test",__name__)
#导入蓝图视图文件
from . import testOne
#testOne.py
from . import test_bp
@test_bp.route("/test")
def test():
return "success"
app下的
#_init_.py
from flask import Flask
from app.test import test_bp
app=Flask(__name__)
app.register_blueprint(test_bp,url_prefix="/user")
from app import app
from flask import render_template
@app.route("/")
def hello_world():
return render_template("echarts.html")
if __name__ == '__main__':
app.run()
2.常用语法
a. 路由返回一个静态页面
from flask import send_file
@app.route('/')
def bar():
return send_file("static/html/hello.html")
b. 路由返回一个templates模板
from flask import Flask, render_template
@app.route("/line")
def line():
return render_template("line.html")
c. 传参
后台:
@app.route("/pie")
def pie():
data =[] #要传的数据
return render_template("pie.html", datas=data)
HTML模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/echarts.js"></script>
<script src="/static/js/jquery.min.js"></script>
</head>
<body>
<script>
//......此处省略n行代码
data: {{ datas | safe }}
//......此处省略n行代码
</script>
</body>
</html>
d.jinja2常用语法
1.控制结构:{% %}
2.去变量值:{{ }}
3.注释:{# #}
4.过滤器:内置函数和字符串处理函数
safe: 渲染时值不转义
capitialize: 把值的首字母转换成大写,其他子母转换为小写
lower: 把值转换成小写形式
upper: 把值转换成大写形式
title: 把值中每个单词的首字母都转换成大写
trim: 把值的首尾空格去掉
striptags: 渲染之前把值中所有的HTML标签都删掉
join: 拼接多个值为字符串
replace: 替换字符串的值
round: 默认对数字进行四舍五入,也可以用参数进行控制
int: 把值转换成整型
使用:{{ data | self }}
5.for循环:
{# 案例1:#}
{% for d in data%}
<li>{{d.name}}</li>
{%endfor%}
{# 案例2:#}
[{% for a in addrs %} '{{ a }}', {% endfor %} ]
3.连接数据库及使用:
from flask_sqlalchemy import SQLAlchemy
import pymysql
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/flask_db1'
#mysql+pymysql://用户名:密码@ip:端口号/数据库
db = SQLAlchemy()
db.init_app(app)
#对应数据库表的映射
class Student(db.Model):
__tableName__ = 'tb_student'
s_id = db.Column(db.Integer, primary_key=True)
s_name = db.Column(db.String(50))
s_sex = db.Column(db.String(10))
s_birthday = db.Column(db.String(50))
s_addr = db.Column(db.String(50))
s_cid = db.Column(db.Integer)
@app.route('/')
def bar(): # put application's code here
sql = 'select s.s_addr,count(*) from tb_student s group by s.s_addr;'
result = db.session.execute(sql).fetchall()
addrs = []
count = []
for i in result:
addrs.append(i[0])
count.append(i[1])
return send_file("bar.html", addrs=addrs, count=count)

浙公网安备 33010602011771号