flask教程2:app对象的初始化和配置


一、flask应用对象初始化参数说明

1 __name__讲解

from flask import Flask #导入类

#创建flask应用对象
#__name__表示当前模块名;模块名:flask以这个模块所在的目录为根目录,默认这个目录中的static为静态目录。templates为模板目录
app=Flask(__name__) #__name__属于Python中的内置类属性,代表对应程序名称。如果当前运行的程序是主程序,此时__name__的值就是__main__,反之,则是对应的模块名。

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "hello world"


if __name__=="__main__":
    app.run()#运行,启动程序

    在代码中app=Flask(__name__) 大家可能__name__ 有所疑惑。反映的是当前模块的名字。

示例1,创建一个demo.py,模块作为启动

print(__name__)

    输出为,__main__。一个文件创建出来,模块名不等于文件名,如果模块作为启动,模块名就是__main__

示例2,模块不作为启动

    把demo.py 导入到其它文件里hello.py


from flask import Flask #导入类
import web.demo #demo.py 导入
#创建flask应用对象
#__name__表示当前模块名;模块名:flask以这个模块所在的目录为根目录,默认这个目录中的static为静态目录。templates为模板目录
app=Flask(__name__) #__name__属于Python中的内置类属性,代表对应程序名称。如果当前运行的程序是主程序,此时__name__的值就是__main__,反之,则是对应的模块名。

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "yudengwu 520 liyueyue"


if __name__=="__main__":
    app.run()#运行,启动程序

    可以看出__name__如果不作为启动模块,导入到其它文件,其模块名为文件路径。

总结
    由此可以看出,if __name__=="__main__": app.run()#运行,启动程序。如果 __name__为启动文件,即__name__=="__main__,则执行程序。否则程序作为包导入其它文件,就不执行该程序。就理解了该行代码意思。
     也能说明,当hello.py作为启动文件时,app=Flask(__name__) 等效为app=Flask(__main__)

2 flask以这个模块所在的目录为根目录

示例1 ,以URL形式访问静态文件

    首先要在Python工程中创建一个目录static(名字和相对位置均不能改动)。如下所示,并在静态文件中新建一个文件例如txt文件、json文件、html文件等)展示静态文件的手段有三种,分别是直接输入url访问、通过路由访问和重定向访问。

    启动hello.py。在网址后面输入static/index.htmlstatic/文件名

     该例子说明 Flask(__name__) 会顺着这个模块所在根目录查找东西。

示例2

app=Flask("abcdef") 乱输入一对字符,启动程序

from flask import Flask #导入类
#创建flask应用对象
#__name__表示当前模块名;模块名:flask以这个模块所在的目录为根目录,默认这个目录中的static为静态目录。templates为模板目录
app=Flask("abcdef") #__name__属于Python中的内置类属性,代表对应程序名称。如果当前运行的程序是主程序,此时__name__的值就是__main__,反之,则是对应的模块名。

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "yudengwu 520 liyueyue"


if __name__=="__main__":
    app.run()#运行,启动程序

     发现还是能运行,这是因为如果程序找不到目录“abcdef”,就会以当前文件所在目录为根目录进行查找。但是千万不要这样写。因为有些字符为Python标准库,是能找到的,如这里输入的不是“abcdef”而是其它Python内置库字符,是会出错的。

3 Flask(__name__) 除了能传__name__还能传哪些参数

  • __name__ 是寻找静态目录和模板目录位置的参数
  • static_url_path是访问静态资源的url前缀,默认为static
from flask import Flask #导入类
#创建flask应用对象

app=Flask(__name__,
          static_url_path="/python",#访问静态资源的url前缀,默认为static
          )

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "yudengwu 520 liyueyue"


if __name__=="__main__":
    app.run()#运行,启动程序

     网址上需加python才能访问静态文件(本文静态文件夹名还是static,未修改)

  • static静态文件的目录,默认static
app=Flask(__name__,
          static_url_path="/python",#访问静态资源的url前缀,默认为static
          static_folder="static",#静态文件的目录,默认static
          )
  • static模板文件的目录,默认static
app=Flask(__name__,
          static_url_path="/python",#访问静态资源的url前缀,默认为static
          static_folder="static",#静态文件的目录,默认static
          template_folder="static",#模板文件的目录,默认static
          )

二 、 静态文件目录与路由说明

     讲解static_url_path static_folder的区别。

  • static_url_path: 前端访问资源文件的前缀目录。(当url有资源文件和动态视图函数时。static_url_path可指明连接后面的为资源文件)
  • static_folder: 后端存储资源文件的目录。默认是/static,就是指明你后端的资源文件

三 、 flask的配置参数设置

app.config.from_ pyfile(’ yourconfig.cfg")或
app.config.from object()或
app.config.from_envvar#从环境
config配置

配置参数设置方法1 (文件)

以配置一个调试为例。
第一步:创建一个调试文件,后缀设为cfg。并在文件中写入内容。DEBUG=True

第二步:配置参数使用方法。使用配置文件app.config.from_pyfile("config.cfg")

from flask import Flask #导入类
#创建flask应用对象
app=Flask(__name__)
#使用配置文件
app.config.from_pyfile("config.cfg")
#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "yudengwu 520 liyueyue"

if __name__=="__main__":
    app.run()#运行,启动程序

可以看到截图中 Debugger is active!

第三步:设置一个错误代码。

def index():
    """
    定义的视图函数
    :return:
    """
    a=1/0
    return "yudengwu 520 liyueyue"

配置参数设置方法2 (类)

#创建配置类
class Config(object):
    DEBUG=True
#使用配置
app.config.from_object(Config)

配置参数设置方法3 (字典)

config是一个字典。

app.config["DEBUG"]=True

四 、读取配置参数的方式

    有时候在配置里面写了一些参数,我们想在视图函数里面读取出来。
方法1:字典读取
    因为config是一个字典,可以以字典形式读取 print(app.config.get("ITCAST")) print(app.config["ITCAST"])

from flask import Flask #导入类
#创建flask应用对象
app=Flask(__name__)

class Config(object):
    DEBUG=True
    ITCAST="python"
#使用配置
app.config.from_object(Config)

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    print(app.config.get("ITCAST"))
    print(app.config["ITCAST"])
    return "yudengwu 520 liyueyue"

if __name__=="__main__":
    app.run()#运行,启动程序

    结果,运行后先点击网址,然后在后台出现下面

方法2:current_app
    有时会出现在视图函数里够不着app对象。使用current_app为app的全局对象的代理人。

from flask import Flask,current_app #导入类
#创建flask应用对象
app=Flask(__name__)

class Config(object):
    DEBUG=True
    ITCAST="python"
#使用配置
app.config.from_object(Config)

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    print(current_app.config.get("ITCAST"))
    print(current_app.config["ITCAST"])
    return "yudengwu 520 liyueyue"

if __name__=="__main__":
    app.run()#运行,启动程序

五 、读取配置参数的方式

run(self, host=None, port=None, debug=None, load_dotenv=True, **options)
app.run()#运行,启动程序

host: Host:监听的主机名。将此设置为“0.0.0.0”
在外部也要有可用的服务器。默认为
’ ‘127.0.0.1’ ’ ‘或’ SERVER_NAME ’ ‘配置变量中的主机
如果存在。
端口:web服务器的端口号。默认为’ 5000 ‘或
端口定义在’ ’ SERVER_NAME ’ '配置变量中。

如果想要外部服务器也能访问,设置为通配符0.0.0.0

app.run(host="0.0.0.0",port=5000)#运行,启动程序

也可以在app.run()设置调试debug

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值