Python Flask学习_初始化、路由、视图函数和响应

Flask提供的Web服务器不适合生产环境使用。

一、初始化(创建Flask程序实例)

所有的Flask程序都必须创建一个程序实例。程序实例是Flask类的对象,经常使用以下的代码创建:

from flask import Flask
app = Flask(__name__)

将构造函数的__name__参数传递给Flask程序,Flask用__name__决定程序的根目录。

二、路由和视图

1、静态路由

访问网站时,客户端把请求发送给Web服务器,Web服务器在把请求发送给Flask程序实例。程序实例要对URL进行分析,然后分发给对应的Python函数处理。这种从URL到函数之间的对应关系成为路由。处理URL的函数被称为视图函数。

最简单的定义路由的方法就是使用app.route装饰器,把修饰的函数注册为路由。

@app.route('/')
def index():
    return '

Hello World!

'

2、动态路由

URL中含有变量,又需要在函数中使用变量。就需要使用动态路由

@app.route('user/')

def user(name):

    return '

Hello,%s

% name'

就是动态部分。会传递给user的参数name,然后再函数中使用。

URL中动态部分默认使用字符串,但是也支持其他类型:int,float,path。path类型也是字符串,但是不把斜线视作分隔符。

@app.route
def user_id('user/'):
    return '

'hello,%d' % id

'

三、在python shell中检查URL映射

打开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映射。

Python Flask学习_初始化、路由、视图函数和响应_第1张图片

Rule指示'/' '/static/' 'user/'都是路由,是在程序中使用app.route或者app.add_url_route()定义的。

( OPTIONS,HEAD,GET)是请求方法。

index,static,user是响应函数。

因此, index>应当这样解释:

如果客户端的请求方法是GET,请求的URL是'/',程序会使用index函数去响应。

注意:'/static/' 是Flask添加的特殊路由,后面会讲。

四、响应

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

五、一些特殊响应

1、重定向响应

重定向响应是一种名为重定向的特殊响应类型,这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面

设置方法:

a)可以使用3个值的返回值生成。

状态码302,指向的地址由location首部提供。

b)在Response对象中设定。

具体方法未知。

c)使用redirect()函数

from flask import redirect
@app.route('/')
def index():
    return redirect('http://www.baidu.com')            #重定向到百度首页 

2、处理错误的响应

由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服务器。



你可能感兴趣的:(python,flask学习)