Python Flask学习_初始化、路由、视图函数和响应 - Go语言中文社区

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 '<h1>Hello World!</h1>'

2、动态路由

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>'

三、在python shell中检查URL映射

打开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

五、一些特殊响应

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



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/bird333/article/details/80711571
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:18:09
  • 阅读 ( 1011 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢