Flask是一个轻量级的Web框架,它只给我们提供了必须的路由和渲染,其他的功能我们可以自由选配,所以Flask的灵活度非常高,且耦合度低,可以满足我们快速开发的需求;
接下来我们看下最最最基本的框架结构:
from flask import Flask
'''
在这里强调一下为什么使用的是from flask import Flask,而不是from flask import *?
首先如果这么写的话,可阅读性就会比较差,别人不知道你需要导入的是什么,也不知道对象是从哪里导入到的;
其次,import * 的导入取决于相关库的定义,如果没有将方法包含进去,import * 是不会导入的,
所以我们在后面的开发中,最好使用的时候明确包名
'''
app = Flask(__name__) # 创建flask应用对象
'''
__name__ 表示的是当前模块的名字,即文件的名字,如果程序运行是从这个文件启动的,那么__name__就是main,如果是从其他模块导入的,
那么就是该模块的文件名
flask以这个模块所在的目录为总目录,默认这个目录的static目录为静态目录,templates为模板目录
如果Flask(目录名)指定错误,没有找到的话,flask就会以这个文件所在的目录为根目录,也就是说即使app=Flask('')也可以运行,
但是不利于后面的维护
'''
@app.route('/') # 使用装饰器绑定路由,将路由映射到视图函数hello
# 什么是路由?就是说我们通过url访问的地址(注意,我们访问不是基于本地文件地址来的,而是通过我们定义的路由路径来的,后面会详细的介绍)
def hello(): # 定义视图函数,就是说这个路由路径当访问的时候该做些什么事情
return 'hello' # 在页面上输出“hello”
if __name__ == '__main__': # 这个就不介绍了,就是判断程序是否从这个文件启动
app.run() # run()方法是提供给我们进行本地调试的方法
现在我们运行一下,本机地址默认是127.0.0.1,默认端口号是5000,我们可以通过下面蓝色的地址在浏览器中访问,我刚才已经访问了一次,所以下面会有日志打印出来,什么时候通过什么方式对页面进行了访问:
上面说了,我们的访问地址不是通过本地文件地址来访问的,接下来我们就看下Flask()的几个属性:
app = Flask(__name__, # 在创建flask应用对象的时候,还可以初始化参数
static_url_path='/python', # 访问静态资料的url前缀,默认是static
static_folder='static', # 静态文件目录,默认就是static
template_folder='templates', # 模板文件目录,默认就是templates
)
就是说我们在访问页面的时候需要分两种情况,一种是这个url指向的是一个静态页面,另一种就是指向的是视图函数;下面我们假设有这种情况,我们定义的路由就是:@app.route('/index.html'),这种情况我们要怎么区分到底是上面的哪一种?
static_url_path就帮我们解决了这个问题,但凡我们通过url访问时以static_url_path定义的路径开头的,我们都暂且认为它是个静态页面,就会到static_folder定义的路径下寻找;
默认访问静态文件的前缀就是static,而我们一般约定俗称也是将静态页面放在static文件夹下面,所以这里会造成一个混淆,静态文件目录是可以由我们指定的,访问静态页面的url前缀也可以修改;
总结:我们在浏览器进行访问的时候,url地址与文件的实际存放地址是没有绝对的关联的,指定它的是static_url_path,文件的实际存放地址在static_folder中指定。
接下来我们来看下flask参数的配置方法,比如我现在需要页面启动的时候进入调试模式:
我们先来看下默认没有开启调试模式的时候是什么样的:
- 使用配置文件的方式配置参数:
1)首先我们在目录下创建一个名为config.cfg的配置文件
2)然后我们在这个文件中写上:
3)回到代码中,我们将配置文件导入: - 使用对象配置参数:
1)首先我们要写一个类,将所有的参数都写在里面:
class config():
DEBUG = True
2)然后我们在代码中进行设置:
我们可以将配置信息看做是以字典的形式进行存取,在配置文件中我们不仅可以配置Flask使用的配置信息,还可以增加我们后面可能会使用到的信息,可通过app.config['键名']的方式提取出来;
接下来我们看下app.run()的参数:
在默认情况下,app.run()运行的地址是127.0.0.1的本地地址,我们计算机都有一个IP地址,那如何通过IP地址对网站进行访问呢?
app.run(host='本机IP',port=端口)
我们可以通过上面的方法对访问地址进行修改,但是修改完毕之后,127.0.0.1就没办法使用了,这时我们可以将host设置成0.0.0.0,这样不管是本机IP,还是本地地址都可以访问了;
我们在最开始的代码中创建了一个路由,一个Web肯定是不止一个路由的,那么我想要查看所有的路由信息该怎么办呢?
print(app.url_map)
我们可以看得见现在已经将所有的路由信息全部打印来了,我们只需要看第一行:
'/' 指的就是路由的名字
(GET,......) 指的就是允许请求的方式
hello 指的就是指向的视图函数
上面我们说到了页面的请求方式,从上面我们就可以看见默认情况下使用的是GET请求,那么如果我想通过POST请求来获取信息,我该怎么设置呢?
@app.route('/',methods = ['GET','POST'])
def hello():
return 'hello'
我们可以在路由绑定路由的时候设置methods参数,设置页面允许的请求方式,我们发现现在已经允许我们使用'GET'和'POST'请求了;
当同一个路由对应多个视图函数的时候,如果均使用默认配置,那么当我们访问的时候,能够访问到的只有第一个,我们可以通过不同的请求方式来实现不同视图函数的实现;
那么如果多个路由路径对应一个视图函数呢?
@app.route('/index')
@app.route('/',methods = ['GET','POST'])
def hello():
return 'hello'