- flask最小应用
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
print('hello world')
app.run()
Flask 中可以使用基于函数的视图(常用),可以是使用基于类的视图,又叫做即插视图
-
flask的唯一URL原则
重定向- image.png
flask的实质是把不带/的url重定向到带有/的url上
如果说不带/和带/都可以访问, 实质上来说就是同一个视图函数或者说是你要访问的资源对应着两个不同的路由,没有保证唯一url的原则
保证url的好处,如果是两个url,当你的网站被搜索引擎索引的时候,两个url就要索引两次,实际上着两个url对应着同样的内容,是没有这个必要的额,这里涉及到搜索引擎的优化
通常情况下的url不加/
-
路由注册的方法
1.装饰器 route2. 通过flask的核心对象来注册
from flask import Flask
app = Flask(__name__)
# @app.route('/hello')
def hello():
print('hello world')
app.add_url_rule('/hello', view_func=hello)
app.run()
一般情况都是使用装饰器的方式注册,但是如果使用即插视图,就需要使用app.add_url_rule的方式注册路由
实质上装饰器的方式也是通过app.add_url_rule的方式注册的,只不过是对它进行了封装。
配置文件
from flask import Flask
app = Flask(__name__)
app.config.from_object('config') # 引入配置文件
@app.route('/hello')
def hello():
print('hello world’)
app.run(host='0.0.0.0', debug=app.config['DEBUG']) # 可以接受外网的访问
- 配置文件中的DEBUG是一个默认参数,默认值是False,注意都是大写,所有的配置文件都需要是大写
if __name__ == '__main__’:
的作用If里面的语句只在入口文件中执行,
调试模式我们通常使用的是flask自带的服务器,但是生产环境我们使用的是nginx+uwsgi部署项目,保证我们在生产环境中不会启动Python内置的服务器
Response响应对象
视图函数的return会做一个简单的封装,返回的是一个Response对象
返回值还有 status code,content-type(告诉接收方如何解析,默认值是text/html),和其他的,封装在heders里
from flask import Flask, make_response
app = Flask(__name__)
app.config.from_object('config') # 引入配置文件
@app.route('/hello')
def hello():
print('hello world')
headers = {
'content-type':'text/plain'
}
response = make_response('<html></html>')
response.headers = headers
return response
#return '<html></html>’, 201, headers
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=app.config['DEBUG']) # 可以接受外网的访问
状态码只是一个标识, 并不会影响返回的内容
Web返回的都是字符串,具体的是什么,其实控制的因素都取决于content-type的,它指定了解释的方式
flask提供了方便的写法, 直接返回多个值