社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
所有的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 '<h1>Hello World!</h1>'
URL中含有变量,又需要在函数中使用变量。就需要使用动态路由。
@app.route('user/<name>')
def user(name):
return '<h1>Hello,%s</h1> % name'
<name>就是动态部分。<name>会传递给user的参数name,然后再函数中使用。
URL中动态部分默认使用字符串,但是也支持其他类型:int,float,path。path类型也是字符串,但是不把斜线视作分隔符。
@app.route
def user_id('user/<int:id>'):
return '<h1>'hello,%d' % id</h1>'
打开pyCharm的Terminal,检查是否是虚拟环境。
(venv)指示当前使用的是虚拟环境。如果不是,可以输入venvScriptsactivates(activates的相对路径),进入虚拟环境。
步骤:
1、输入python回车
打开python解释器
2、输入from test import app回车
test 是模块名,app是模块中定义的一个实例。
3、输入 app.url_map回车
查看app的url_map属性,即可获得。当前url映射。
Rule指示'/' '/static/<filename>' 'user/<name>'都是路由,是在程序中使用app.route或者app.add_url_route()定义的。
( OPTIONS,HEAD,GET)是请求方法。
index,static,user是响应函数。
因此,<Rule '/' (OPTIONS, HEAD, GET) -> index>应当这样解释:
如果客户端的请求方法是GET,请求的URL是'/',程序会使用index函数去响应。
注意:'/static/<filename>' 是Flask添加的特殊路由,后面会讲。
Flask调用视图函数后,视图函数会返回一些值 ,这些值最终会返回给客户端,这些值就是响应。
@app.route('/')
def index():
return '<h1>Bad Request</h1>'
这是之前的视图函数,返回的是一个str。但是完全可以返回一个元祖(tuple),元祖有三个值组成,分别表示返回的字符串(str)、状态码(int)、首部header(dict)。
@app.route('/')
def index():
return '<h1>Bad Request</h1>',400
这个视图函数返回了两个值'<h1>Bad Request</h1>',400
第一个值str是返回的内容主题,第二个400是状态码。400表示请求无效。
除了返回一个元祖之外,还可以返回一个Response对象。Response对象可以通过make_response()函数由三个值的元祖构造而成,因此本质上是一样的。
from flask import make_response
@app.route
def index():
response = make_response('<h1>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/<name>')
def user(name):
if name !='chen': #如果name != 'chen'
abort(404) #由abort函数生成404错误响应
return '<h1> Hello,%s </h1>'% name
注意:abort(404)之后,控制权不在user()函数,即不会执行return '<h1>Hello,%s </h1>' % name。控制权交还给Web服务器。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!