Flask是......不用我介绍了,你既然已经来看这篇博客了,我想你对Flask的熟识程度已经达到一种级别了。
接下来我们一起学习Flask。
from flask import Flask
app = Flask(__name__)
@app.route('/hello/')
def index():
return 'hello i use python'
if __name__ == '__main__':
app.run()
上述代码就是展现一个最简单的web应用。
关于上述代码分为三个步骤:
① 注册一个Flask的是对象
② 定义一个视图函数,并使用装饰器进行装饰
③ 调用run()方法
关于上述代码我向提醒大家的是关于装饰器中的参数问题
问题:@app.route('/hello/')与@app.route('/hello')写法的区别???
如果使用的是@app.route('/hello/'),在 chrome 浏览器中输入http://127.0.0.1:5000/hello/或者http://127.0.0.1:5000/hello均可以返回hello i use python。那么两者的真正区别是什么呢?使用http://127.0.0.1:5000/hello访问的时候,chrome 浏览器会先向http://127.0.0.1:5000/hello发一个请求,会返回301状态码,然后再向http://127.0.0.1:5000/hello/发送请求返回hello i love python。
如下图所示:
如果使用的是@app.route('/hello'),那么在 chrome 浏览器中输入http://127.0.0.1:5000/hello/将会报错,如下图所示:
那么现在你已经明白了上述两种写法的区别了,所以更在开发中使用哪一种写法,需要自己决定。
关于路由的注册官方建议我们使用上述装饰器的方式,那么就肯定有另外一种方式可以实现路由的注册。我们一起来看源码。如图所示:
可以看到装饰器route的本质是调用了add_url_rule方法来实现路由的注册。
from flask import Flask
app = Flask(__name__)
# @app.route('/hello')
def index():
return 'hello i use python'
app.add_url_rule('/hello', view_func=index)
if __name__ == '__main__':
app.run()
通过调用add_url_rule方法同样可以注册相关路由。
add_url_rule方法需要调用的参数如下所示:
def add_url_rule(self, rule, endpoint=None, view_func=None,
provide_automatic_options=None, **options):
pass
到此为止,需要注意的地方都已经展示清楚了。
在此之前注意到每次修改了代码都需要手动重启,才能让修改过的代码重新编译。
难道就没有自动重新编译的功能么?当然有,只需要简单的的配置一个参数即可,代码如下所示:
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def index():
return 'hello i use python'
if __name__ == '__main__':
app.run(debug=True)
只需要在run()中传入debug=True就能够实现修改代码重新启动。
但是你认为在run()中传入debug=True是合适的么?
也许你听说过:要把代码放置合适的位置。那么什么是合适的位置呢?这需要一定的代码积累才能够真正的体会这句话的含义。
如果说实在开发环境中,在run()中传入debug=True没有问题,可是在生产环境中呢?
由于你需要在开发环境与生产环境中保持代码的镜像关系,此时在run()中传入debug=True是不合适的。
那么该如何解决这个问题呢?
使用独立的配置文件来解决这个问题。
我们需要新建一个settings.py的文件来放置一些需要经常变动的数据,如下所示:
# _*_coding:utf-8_*_
# 该模块用来定义开发过程需要的常量
# *********注意***********
# 定义的常量名称必须大写
# ***********************
DEBUG = True
也许你已经注意到了上述文件中有这样一句话:定义的常量名称必须大写。
如果把常量名称改为小写会出现什么样的情况呢?有兴趣的同学可以去尝试一下。
已经定义好了settings.py文件,那么该如何使用这个文件呢?
Flask已经为我们开放了相关的API,你只需要调用相关的API即可。
如下所示:
# _*_ coding;utf-8_*_
from flask import Flask
app = Flask(__name__)
# 调用配置文件的相关API
app.config.from_object('config')
@app.route('/hello')
def index():
return 'hello i use python'
if __name__ == '__main__':
app.run(debug=app.debug)
以上,只是Flask的入门的介绍。
在最后,我想抛出一个问题:你真的理解 if __name__ == '__main__' 的作用么?