Flask框架(一)

本文是Flask框架的基础教程,涵盖了配置文件的设置,包括应用程序配置、加载配置文件和使用类进行配置。还介绍了路由的使用,如无参路由、带参数的路由以及限制参数值的路由。此外,讲解了重定向、abort错误处理和蓝图的安装及使用,帮助理解Flask框架的核心概念和操作。
摘要由CSDN通过智能技术生成

一、配置文件

1.应用程序配置
# 1.直接使用配置字典config
# app.config['DEBUG'] = True         开启debug模式
# app.config['ENV'] = "development"  调试开发和生产环境
# app.config["SECRET_KEY"] = "sdjkfwiuriwqrjkjsfnn,qoi"  用于签名和加密
from flask import Flask

app = Flask(__name__)

# 应用程序配置
# 1.直接使用配置字典config
 app.config['DEBUG'] = True
 app.config['ENV'] = "development"
 app.config["SECRET_KEY"] = "sdjkfwiuriwqrjkjsfnn,qoi"

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

2.加载配置文件
#app.py

from flask import Flask

app = Flask(__name__)

# 2 加载配置文件
app.config.from_pyfile("settings.py")

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()
#settings.py

# 调试模式,修改代码会自动重启服务器
DEBUG = True
# 设定服务器的地址和端口
SERVER_NAME = "127.0.0.1:9009"
# 用于签名和加密
SECRET_KEY = "sjkdfksdklfsdm,fm,wrio3wiorwiojrejioewrdm,as,md"
3.使用类进行配置(使用对象)

实用类的好处,继承。可以继承公共文件

#app.py

# 3.使用类进行配置
from settings1 import Development
app.config.from_object(Development)

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()
#settings1.py

# 公共配置
class BaseConfig:
    SECRET_KEY = "sjkdfksdklfsdm,fm,wrio3wiorwiojrejioewrdm,as,md"


class Development(BaseConfig):
    DEBUG = True
    SERVER_NAME = "127.0.0.1:7007"
4.flask-script插件

简单来说,就是flask终端启动的参解析器;这样就可以不改代码完成不同方式的启动。

4.1.安装
pip install flask-script
4.2.使用
-?, --help      # 查看帮助
-h, --host      # 指定主机
-p, --port      # 指定端口
-d              # 开启调试模式
-r              # 自动加载

eg:  python app2.py runserver -d -p 8008
from flask import Flask
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

@app.route("/")
def index():
    return "Hello world"

if __name__ == '__main__':
    # -d 调试模式  -h 服务器地址  -p 端口号
    #  python app2.py runserver -d -p 8008
    manager.run()

二、路由

1.无参路由
#app.py

from flask import Flask
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

@app.route("/")
def index():
    return "Hello world"

if __name__ == '__main__':
    manager.run()
2.带一个参数的路由地址
#app.py

from flask import Flask
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

# 带参数路由,通过路由传参
@app.route('/list/<name>/')
def list(name):
    return "Hello:" + name

if __name__ == '__main__':
    manager.run()
3.限制参数值的路由

参数类型:string、int、path类型、float类型

路由规则:
1、必须以/开头
2、最好以/结尾,如果不以斜线结尾,请求路径中末尾不能带斜线
	eg:
	@app.route('/list/<name>')
	http://127.0.0.1:8009/list/tom/   会报错
#app.py

from flask import Flask
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

# 1.string类型,默认的是
# string参数:<参数名>
@app.route('/show/<name>/')
def show(name):
    """
    :param name: 视图函数的参数名必须和路由参数的参数名一致
    :return:
    """
    print(name)
    return name

if __name__ == '__main__':
    manager.run()
# 2 整型参数
# 整数参数: <int:参数名>
@app.route("/param/<int:age>/")
def get_para(age):
    print(type(age),age)
    return str(age)

#传入其他参数会报错
# 3.path类型: (针对参数中包含/的情况)
#如果参数字符串中包含/,可以path类型,path类型可以把/当普通字符
# path参数:<path:参数名>
# eg: http://127.0.0.1:8009/route/c:/python/
@app.route("/route/<path:c>")
def route(c):
    return c
# 4.float类型参数
# float参数:<float:参数名>
@app.route("/money/<float:money>")
def get_money(money):
    print(type(money))
    return str(money)

#其他类型报错,整数报错

三、重定向redirect

1.作用

通过重定向,实现从一个视图函数跳转到另一个视图函数的操作

2.导入重定向
from flask import Flask, redirect, url_for

说明

1. redirect 参数为要跳转的路由地址
2. url_for 函数用于构建指定函数的URL。 它把函数名称作为第一个参数。它可以接受任意个关键字参数,每个关键字参数对应URL中的变量。未知变量将添加URL中作为查询参数。
3. 组合使用redirect(url_for(endpoint,**values))
3.实例
#app.py

from flask import Flask,redirect
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

@app.route('/direct/')
def direct():
    print("direct")
    #重定向,redirect("请求路径")
	return redirect('/list/tom/')  #常量情况

	#变量情况
    name = 'admin'
    return redirect('/list/{}/'.format(name))

	
if __name__ == '__main__':
    manager.run()
4.url_for
    # url_for('函数名',参数名1=value,参数名1=value,...)
    # 功能: 根据函数名求出请求路径
    # 多余的参数会变成get传参
    # 请求路径一般是内部,但不局限于内部
#app.py

from flask import Flask,redirect,url_for
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

# 多参数的 url_for情况
@app.route('/show/<name>/<int:age>/')
def show(name, age):
    print(name)
    return name

@app.route('/direct/')
def direct():
    print("direct")
    #重定向,redirect("请求路径")
    
    #常量情况
	return redirect('/list/tom/')  

	#变量情况
    name = 'admin'
    return redirect('/list/{}/'.format(name))

	#不带参数
    print(url_for('index'))  # index对应的路由是 "/"

    #带参数情况
    # 参数应该使用关键字参数传递
    print(url_for('list',name='admin')) #/list/admin/
    print(url_for('show',name='tom',age=20)) # /show/tom/20/

    # 多余的参数会变成get传参
    return redirect(url_for('list',name='哈哈',sex='男'))
	
    # 请求路径一般是内部,但不局限于内部
    return redirect("http://www.baidu.com")
    
if __name__ == '__main__':
    manager.run()

四、abort通过抛出状态码判断错误信息

1.导入
from flask import abort
2.说明
和raise 类似 上面的代码正常执行 下面代码不再执行
3.实例
from flask import Flask, abort
from flask_script import Manager

app = Flask(__name__)
# 实例管理器对象,负责接收终端传来的参数,解释
manager = Manager(app)

@app.route("/")
def index():
    return "Hello world"

# 抛出异常
@app.route('/error/')
def handle_error():
    abort(500)  # 抛异常,后面代码不再执行
    # abort(403)

#渲染页面
@app.errorhandler(500)
def handle_500(err):
    return "{name}是不是睡着,{name}的代码完蛋了".format(name="程序猿")

if __name__ == '__main__':
    manager.run()

五、蓝图的使用

当大量的视图函数放在一个文件中,很明显是不合适。需将相关的视图函数放在单独的文件中。蓝图就是为了解决这个问题而出现的。防止循环引用

1.安装蓝图
pip install blueprint
1.1.导入蓝图、注册蓝图,也可以指定路由前缀(优先级更高)
#app.py

from flask import Flask
#导入蓝图对象
from views import bp

app = Flask(__name__)

#注册函数
#app.register_blueprint(bp)

app.register_blueprint(bp,url_prefix='/bp') 
#指定路由前缀便于区分每个模块的重复路径,也可以写于views

if __name__ == '__main__':
    app.run()
1.2.蓝图对象
# views.py

# 蓝图对象
# Blueprint(self,name,import_name)
# name是蓝图名称,不要重名
# import_name 模块名
# url_prefix 路由前缀: 以/开头,结尾不要有/
# 视图函数不能重名

bp = Blueprint('bp',__name__,url_prefix='/bp')

# 视图函数不能重名
@bp.route('/')
def hello_world():
    return 'Hello World!'

#视图函数不能重名
@bp.route('/hello/')
def hello():
    return '你好我的世界'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值