当前位置: 首页 > 面试题库 >

Flask应用中的自定义路由

富昕
2023-03-14
问题内容

我一直在尝试了解如何生成动态Flask URL。我已经阅读了文档和一些示例,但无法弄清楚为什么此代码不起作用:

path = 'foo'
@app.route('/<path:path>', methods=['POST'])
def index(path=None):
    # do some stuff...
    return flask.render_template('index.html', path=path)

我希望将index.html模板提供给/foo,但事实并非如此。我收到一个构建错误。我想念什么?

如果我使用固定路径(如)/bar,则一切正常。

@app.route('/bar', methods=['POST'])


问题答案:

你已经拥有了很多东西。你需要做的就是使用/<var>语法(或/<converter:var>适当的语法)修饰视图函数。

from flask import Flask, render_template

app = Flask(__name__)

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

@app.route('/<word>', defaults={'word': 'bird'})
def word_up(word):
    return render_template('whatstheword.html', word=word)

@app.route('/files/<path:path>')
def serve_file(path):
    return send_from_directory(app.config['UPLOAD_DIR'], path, as_attachment=True)

if __name__ == '__main__':
    app.debug = True
    app.run(port=9017)

当Flask像你尝试使用的那样从动态路由的URL中提取变量时,默认情况下它将是Python中的unicode字符串。如果你使用<int:var><float:var>转换器创建变量,它将在你的应用空间中转换为适当的类型。

<path:blah>转换器将包含斜杠(字符串匹配/),那么你可以通过/blah/dee/blah在你的浏览功能路径变量将包含字符串。在不使用path转换器的情况下,flask将尝试将你的请求分派到在路线上注册的视图函数/blah/dee/blah,因为平原由/uri中的下一个划定。

因此,查看我的小应用程序,该/files/<path:path>路由将提供与用户在请求中发送的路径相匹配的任何文件。我从这里的文档中提取了这个示例。

另外,请挖掘你可以通过装饰器的关键字arg为变量URL指定默认值route()。

如果需要,你甚至可以url_map根据在应用程序空间中指定视图功能和路线的方式访问Werkzeug构建的基础。有关更多内容,请查看有关URL注册的api文档。



 类似资料:
  • Flask 和 Tornado 是我现在最“熟悉”的两个 Python web 框架,各自都具备一些别具一格的特性, 在很多实现上都走了截然不同的道路。它们的路由实现分别代表了 Python web 框架的两大风格: Flask 使用函数作为 web 请求的 Handler,这一点和早期的 Django 是一致的, 不过 Django 似乎是 1.7 以后推荐使用 class 作为 Handler

  • 问题内容: 我有一个复杂的基于Flask的Web应用程序。有许多具有视图功能的单独文件。它们的URL由装饰器定义。有没有办法获取我的应用中已声明的所有路线的列表?也许有一些我可以调用该对象的方法? 问题答案: 应用程序的所有路由都存储在的实例上。你可以使用以下方法遍历实例:

  • easySwoole支持路由拦截。其路由利用fastRoute实现,因此其路由规则与其保持一致,该组件的详细文档请参考 GitHub文档 使用指导 若需要在asySwoole使用自定义路由拦截功能,请在应用目录的Http控制器目录下(默认为HttpController)下,建立Router类, 井继承\EasySwoole\Core\Http\AbstractInterface\Router实现r

  • 在Swoole::$php->runMVC() 调用之前可以修改默认的路由函数。 Swoole::$php->router(function(){ return array('controller' => 'YourController', 'view' => 'YourView'); }); Swoole::$php->runMVC(); 设置后将使用制定的函数作为路由,路由函数务必要

  • phpGrace 追求极致的效率,我们并不认同在url的基础上继续进行复杂的正则匹配是一种高效的、明智的选择!方便的调用规则比不上轻快的效率!所以我们并不建议您使用复杂的路由规则!尽管如此为了满足开发者的需求和习惯我们还是开放了简单路由!在入口页开启路由配置 <?php define('PG_ROUTE', true);//在框架核心文件引用前定义 include 'phpGrace/phpGra

  • 问题内容: 我需要做一个自定义验证WTForms当输入为:数量:数量 -例如,2:1 所以,我的问题是-如何创建这种验证器? 问题答案: 你可以通过编写方法在表单内编写自定义验证器。如果它引发,则该表格将无效并显示错误。 对于你的特定情况,这是使用正则表达式的解决方案。它找到字符串的匹配项,然后使用一些拆分来取回分数。验证你可以通过访问分数的形式后。