zoukankan      html  css  js  c++  java
  • 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'
    测试图太占位置,就不加了。下一篇介绍静态资源与模板
     
     
     
     
     
  • 相关阅读:
    工资调整
    演义群侠传(八)【bloom组件源码学习】
    Win8快捷键
    教育类app
    演义群侠传(八)【我需要学习的东西】
    演义群侠传(七)【GC垃圾回收】
    演义群侠传(十)【重学设计模式】
    addChild&&rawChildren的addChild
    演义群侠传(六)【PSD切图方式】
    linux分析网卡流量
  • 原文地址:https://www.cnblogs.com/52why/p/13198772.html
Copyright © 2011-2022 走看看