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)
posted @ 2022-05-12 10:28  xyongz  阅读(34)  评论(0)    收藏  举报