Flask注册路由(二)

      在第一节中,启动Flask的程序后,在浏览器中访问http:localhost//5000/就会显示Hello World,

也就是说,在WEB的应用程序里,客户端和服务器上的Flask程序交互简单的来说可以总结为:

1、用户在浏览器输入请求地址

2、Flask程序接收用户请求的地址并且对请求的地址进行解析

3、依据请求的地址URL找到对应的视图函数,视图函数进行处理

4、视图函数接收到处理请求后,生成响应,返回给客户端,也就是浏览器

5、浏览器接收到响应后对信息进行解析,将信息展示显示在页面中

在Flask的应用程序中,是需要在视图函数前加app.route()装饰器,并传入URL规则作为参数,这样URL

就与视图函数之间建立起了关联。编写视图函数Hello,它的源码为:

from flask import Flask

app = Flask(__name__)
app.config.from_pyfile('config.py',silent=True)


@app.route('/')
def hello_world():
    return 'Hello World!'

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


if __name__ == '__main__':
    app.run()

 

在如上的视图函数中,app.route('/index')装饰器是把地址/index与index()视图函数绑定起来,当用户

访问这个URL的时候就会触发index()的函数。执行视图函数后,视图函数返回的值将作为响应的主体,

也就是说把返回的响应的主体展示在浏览器窗口的HTML的页面。

     在实际的工作中,视图函数的路由不会如上面的那么简单,在视图函数中都是有参数的,如要实现

打印“您好,无涯”,把无涯当作一个参数,那么需要在视图函数中增加一个name的参数,这个参数随

着调用的时候,输入不同的值显示不同的结果,那么要实现这样的效果,它的源码为:

from flask import Flask

app = Flask(__name__)
app.config.from_pyfile('config.py',silent=True)


@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/index/<name>')
def index(name):
    return 'Hello {0}'.format(name)


if __name__ == '__main__':
    app.run()

 

如果在路由中需要指定请求的参数它的数据类型,如int类型,那么就需要在注册路由的时候指定请求

参数的类型,修改后的视图函数为:

@app.route('/index/<int:articleID>')
def index(articleID):
    return '文章ID: {0}'.format(articleID)

 

在GET的请求中,经常基于业务的需要,需要通过参数来当传递请求参数的过程,如写一个搜索的

案例代码,它的视图函数源码为:

from flask import Flask,request

app = Flask(__name__)
app.config.from_pyfile('config.py',silent=True)


@app.route('/s/')
def so():
    wd=request.args.get('wd')
    return '通过查询搜索的关键字为:{0}'.format(wd)

if __name__ == '__main__':
    app.run()

 

在如上的源码中可以看到,首先需要导入request,然后在视图函数中,在GET的请求中获取查询的关键字,

然后把查询的关键字打印出来。

      还有另外一种场景是返回多个URL的地址,依据不同的URL显示不同的信息,如输入博客的地址返回

博客的信息,依据用户的信息返回用户的信息。增加新的视图函数,它的源码为:

@app.route('/<any(blog,user):url_path>/<uid>/')
def login(url_path,uid):
    if url_path=='blog':
        return '博客的首页详细信息为:{0}'.format(uid)
    elif url_path=='user':
        return '无涯课堂首页详细信息为:{0}'.format(uid)

 

posted @ 2019-03-31 17:43  无涯(WuYa)  阅读(596)  评论(0编辑  收藏  举报