flask框架整理01

这篇博客是关于Flask框架的整理,首先介绍了如何创建'Hello Flask'程序,包括示例代码和相关配置参数,如初始化参数和程序加载配置。接着,讲解了Flask的启动方法,如指定IP、端口和调试模式。然后,文章重点讨论了路由的基本定义,如何指定路由地址以及如何给路由传递参数,展示了通过同一视图函数处理不同URL的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flask框架 整理01

hello flask 程序

示例

# –*– coding: utf-8 –*–
# @Time      : 2019/7/6 09:47
# @Author    : Damon_duanlei
# @FileName  : hello_flask.py
# @BlogsAddr : https://blog.youkuaiyun.com/Damon_duanlei

from flask import Flask

# 创建flask的应用对象
# __name__ 当前模块名,传入模块名指明整个工程的总目录
# 默认此目录中的 static为静态目录, templates为静态目录
app = Flask(__name__)


# 装饰器的作用是将路由映射到视图函数 index
@app.route("/")
def index():
    """定义视图函数"""
    return "index page"


@app.route("/hello")
def hello_flask():
    return "<h1> Hello Flask </h1>"


if __name__ == '__main__':
    # 启动flask
    app.run()

相关配置参数

flask 初始化参数
app = Flask(__name__,
            static_url_path="/python",  # static_utl_path 访问静态资源的前缀 默认值static
            static_folder="/static",  # static_folder 静态文件目录, 默认值static
            template_folder="/template"  # template_folder 模板目录,默认template
            )
程序加载配置

在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:

from flask import current_app
# 程序加载配置方式
# 1.使用配置文件
app.config.from_pyfile("config.cfg")
# 2.从对象导入(常用)
class Config(object):
    DEBUG = True       
app.config.from_object(Config)
# 3.直接操作app.config 的字典对象
app.config["DEBUG"] = True

# 读取配置参数
# 直接操作config的字典对象
app.config.get()
# 通过 current_app获取参数
curren_app.config.get()
flask启动

可以指定运行的主机IP地址,端口,是否开启调试模式


app.run(host="127.0.0.1", port=5000, debug=True)

路由基本定义

查看所有的路由使用 **app.url_map


if __name__ == '__main__':
    print(app.url_map)
    # 启动flask
    app.run(debug=True)

运行结果:

Map([<Rule '/hello/flask' (HEAD, OPTIONS, GET) -> hello_flask>,
 <Rule '/hello' (HEAD, OPTIONS, GET) -> hello_flask>,
 <Rule '/' (HEAD, OPTIONS, GET) -> index>,
 <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
指定路由地址
# –*– coding: utf-8 –*–
# @Time      : 2019/7/7 10:50
# @Author    : Damon_duanlei
# @FileName  : url_demo.py
# @BlogsAddr : https://blog.youkuaiyun.com/Damon_duanlei

from flask import Flask, redirect, url_for

# 创建flask的应用对象
# __name__ 当前模块名,传入模块名指明整个工程的总目录
# 默认此目录中的 static为静态目录, templates为静态目录
app = Flask(__name__)


@app.route("/")
def index():
    """定义视图函数"""
    return "index page"

# 一个视图函数对应多个路由
@app.route("/hello/flask")
@app.route("/hello")
def hello_flask():
    return "<h1> Hello Flask </h1>"


# 通过methods指定访问的限定方式
@app.route("/postonly", methods=["POST"])
def post_only():
    return "post only page"


# 同一路由装饰多个视图函数
@app.route("/methods", methods=["POST"])
def post_method():
    return "post method page"


@app.route("/methods", methods=["GET"])
def get_method():
    return "GET method page"


# 使用url_for进行反解析
@app.route("/login")
def login():
    # 登录逻辑......
    # 使用url_for 函数, 可以通过视图函数的名字找到视图函数对应的url路径
    url = url_for("hello_flask")
    return redirect(url)


if __name__ == '__main__':
    print(app.url_map)
    # 启动flask
    app.run()

给路由传参

有时需要将同一类 URL 映射到同一个视图函数处理, 比如, 使用同一个视图函数来显示不同用户的个人信息.

代码示例:

# –*– coding: utf-8 –*–
# @Time      : 2019/7/7 14:57
# @Author    : Damon_duanlei
# @FileName  : converter_demo.py
# @BlogsAddr : https://blog.youkuaiyun.com/Damon_duanlei

from flask import Flask, redirect, url_for

# 创建flask的应用对象
# __name__ 当前模块名,传入模块名指明整个工程的总目录
# 默认此目录中的 static为静态目录, templates为静态目录
app = Flask(__name__)


@app.route("/")
def index():
    """定义视图函数"""
    return "index page"


# 转换器
# 转换器有以下类型
# string   接受字符串 除"/"
# int      接受整数
# float    接受浮点数
# path     和默认转换器相似, 但是接受斜线
@app.route("/user/<int:user_id>")
@app.route("/user/<user_id>")  # 不指定转换器类型时 使用默认string类型
def user(user_id):
    return "user id is {}".format(user_id)


# 自定义转换器(提取手机号为例)
# 导入 BaseConverter
from werkzeug.routing import BaseConverter


# 1.定义自己的转换器
class MobileConverter(BaseConverter):
    def __init__(self, url_map):
        # 调用父类的初始化方法
        super().__init__(url_map)
        self.regex = "13[0-9]{9}"  # 以此为例

    #


# 2.将自定义的转换器添加到flask的app.url_map.converters
app.url_map.converters["mobile"] = MobileConverter


# 3.使用自定义的转换器
@app.route("/call/<mobile:mobile_number>")
def call_phone(mobile_number):
    return "call phone number {}".format(mobile_number)


# 定义正则转换器
class RegexConverter(BaseConverter):
    def __init__(self, url_map, regex):
        super().__init__(url_map)
        self.regex = regex

    def to_python(self, value):
        # 转换器提取到参数后会将参数传到 to_python中进行用户自定义的逻辑处理
        # 将处理后的值返回给视图函数       
        pass
        return "处理后的参数"

    def to_url(self, value):
        # 当重定向使用 url_for 时,入重定向到的视图函数使用转换器获取参数
        # 如 url = url_for("call_phone",mobile_number="xxx")时
        # 传入的参数先进入 to_url 方法处理,将处理结果返回给 call_phone 视图函数
        pass
        return "处理后的参数"

app.url_map.converters["re"] = RegexConverter


# 将匹配的正则表达式以参数行驶传入
@app.route("/callnumber/<re(r'13[0-9]{9}'):number>")
def send_email(number):
    return "call number to {}".format(number)


if __name__ == '__main__':
    # 启动flask
    app.run(debug=True)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值