Flask框架02(路由)

前言:
  使用route()装饰器来把函数绑定到 URL。在flask01最小应用 中,就使用route添加了一个路由,将/下的请求绑定到了index函数上。
 
添加路由:
@app.route('/version')
def version():
    return  'Version: V0.1'
这里添加了一个路由,将/version下的请求绑定到version函数上。除了这种简单的路由,我们还可以可以动态变化 URL 的某些部分, 还可以为一个函数指定多个规则。
测试结果:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
变量规则:
通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的 部分会作为关键字参数传递给函数。通过使用 <converter:variable_name> ,可以 选择性的加上一个转换器,为变量指定规则。
源码:
@app.route('/user/<username>')
def get_username(username):
    return 'Username %s' % escape(username)

@app.route('/user/<int:user_id>')
def get_user_id(user_id):
    return 'Userid %d' % user_id

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    return 'Subpath %s' % escape(subpath)
这里的源码没什么需要解释的,就只需要介绍一下类型:
转换器类型:
string (缺省值) 接受任何不包含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string ,但可以包含斜杠
uuid 接受 UUID 字符串
 
URL / 重定向行为
源码:
@app.route('/projects/') 
def projects(): 
    return 'The project page' 

@app.route('/about') 
def about(): 
    return 'The about page'
解释:
projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。
about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。
 
url构建
url_for 函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。
为什么不在把 URL 写死在模板中,而要使用反转函数url_for动态构建?
  1. 反转通常比硬编码 URL 的描述性更好。
  2. 你可以只在一个地方改变 URL ,而不用到处乱找。
  3. URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
  4. 生产的路径总是绝对路径,可以避免相对路径产生副作用。
  5. 如果你的应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中),url_for 会为你妥善处理。
源码:
@app.route('/')
def index():
    return 'Hello World'

@app.route('/version')
def version():
    return  'Version: V0.1'

@app.route('/user/<username>')
def get_username(username):
    return 'Username %s' % escape(username)

with app.test_request_context():
  print(url_for('index'))
  print(url_for('version'))
  print(url_for('get_username', username='John Doe'))
输出结果:
/
/version
/user/John%20Doe
 
HTTP 方法
Web 应用使用不同的 HTTP 方法处理 URL 。当你使用 Flask 时,应当熟悉 HTTP 方法,我们前面的路由都是没有设置HTTP方法的。 缺省情况下,一个路由只回应 GET 请求。但是我们可以使用route装饰器的 methods 参数来处理不同的 HTTP 方法。
源码:
@app.route('/key', methods=['GET', 'POST'])
def methods_test():
    if request.method == 'POST':
        return 'post key'
    else:
        return 'get key'
测试图太占位置,就不加了。下一篇介绍静态资源与模板
 
 
 
 
 
posted @ 2020-06-27 16:35  红雨520  阅读(177)  评论(0编辑  收藏  举报