所有的Flask程序都必须创建一个程序实例。程序实例是Flask类的对象,经常使用以下的代码创建:
from flask import Flask
app = Flask(__name__)
将构造函数的__name__参数传递给Flask程序,Flask用__name__决定程序的根目录。
访问网站时,客户端把请求发送给Web服务器,Web服务器在把请求发送给Flask程序实例。程序实例要对URL进行分析,然后分发给对应的Python函数处理。这种从URL到函数之间的对应关系成为路由。处理URL的函数被称为视图函数。
最简单的定义路由的方法就是使用app.route装饰器,把修饰的函数注册为路由。
@app.route('/')
def index():
return 'Hello World!
'
URL中含有变量,又需要在函数中使用变量。就需要使用动态路由。
@app.route('user/')
def user(name):
return 'Hello,%s
% name'
URL中动态部分默认使用字符串,但是也支持其他类型:int,float,path。path类型也是字符串,但是不把斜线视作分隔符。
@app.route
def user_id('user/'):
return ''hello,%d' % id
'
打开pyCharm的Terminal,检查是否是虚拟环境。
(venv)指示当前使用的是虚拟环境。如果不是,可以输入\venv\Scripts\activates(activates的相对路径),进入虚拟环境。
步骤:
1、输入python回车
打开python解释器
2、输入from test import app回车
test 是模块名,app是模块中定义的一个实例。
3、输入 app.url_map回车
查看app的url_map属性,即可获得。当前url映射。
Rule指示'/' '/static/
( OPTIONS,HEAD,GET)是请求方法。
index,static,user是响应函数。
因此,
如果客户端的请求方法是GET,请求的URL是'/',程序会使用index函数去响应。
注意:'/static/
Flask调用视图函数后,视图函数会返回一些值 ,这些值最终会返回给客户端,这些值就是响应。
@app.route('/')
def index():
return 'Bad Request
'
这是之前的视图函数,返回的是一个str。但是完全可以返回一个元祖(tuple),元祖有三个值组成,分别表示返回的字符串(str)、状态码(int)、首部header(dict)。
@app.route('/')
def index():
return 'Bad Request
',400
这个视图函数返回了两个值
'Bad Request
',400
第一个值str是返回的内容主题,第二个400是状态码。400表示请求无效。
除了返回一个元祖之外,还可以返回一个 Response对象。Response对象可以通过 make_response()函数由三个值的元祖构造而成,因此本质上是一样的。
from flask import make_response
@app.route
def index():
response = make_response('This is document carries a cookie
return response
重定向响应是一种名为重定向的特殊响应类型,这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。
设置方法:
a)可以使用3个值的返回值生成。
状态码302,指向的地址由location首部提供。
b)在Response对象中设定。
具体方法未知。
c)使用redirect()函数
from flask import redirect
@app.route('/')
def index():
return redirect('http://www.baidu.com') #重定向到百度首页
由abort函数生成。
@app.route('/user/')
def user(name):
if name !='chen': #如果name != 'chen'
abort(404) #由abort函数生成404错误响应
return ' Hello,%s
'% name
注意:abort(404)之后,控制权不在user()函数,即不会执行return 'Hello,%s
' % name。控制权交还给Web服务器。