python - Flask - 如何重用 URL 参数替换功能?
问题描述
我正在尝试构建一个基于字符串自动构建重定向 url 的视图类,例如:
class DeleteBook(RedirectView):
route = "/library/<int:library_id>/book/<int:book_id>/delete"
redirect_url = "/library/<int:library_id>/book"
def context(self, library_id, book_id):
book = Book(book_id)
book.delete()
并且RedirectView
(请认为这BaseView
对问题不重要)
class RedirectView(BaseView):
def replace_parameters(self, url, **params):
raise NotImplementedError()
def get(self, **params):
try:
self.context(**params)
flash('Book deleted')
except:
flash('Could not delete book')
finally:
redirect_url = self.replace_parameters(self.redirect_url, params)
return redirect(redirect_url)
如何replace_parameters
在我的RedirectView
类中实现,使其行为与 Flask 的路由参数替换功能完全一样?
我认为这个问题主要与了解 Flask 内部 API 有关,我找不到执行这部分的方法。
解决方案
使用url_for
将是最 Flasky 的事情。使用它的目的是将您的代码与 URL 分离,您只需引用视图/路由名称。在您分享的特定情况下,它看起来像这样:
class DeleteBook(RedirectView):
route = "/library/<int:library_id>/book/<int:book_id>/delete"
redirect_route = 'library_books'
def context(self, library_id, book_id):
book = Book(book_id)
book.delete()
class RedirectView(BaseView):
def get(self, **params):
try:
self.context(**params)
flash('Book deleted')
except:
flash('Could not delete book')
finally:
return redirect(url_for(redirect_view, params))
library_books
将是处理 url '/library//book' 的视图的名称。
这是 的 API 参考文档url_for
。它可以处理带有路径变量名称的关键字参数。
推荐阅读
- git - 如何将 gitlab 存储库同步到自动使用 ssh 的远程服务器
- node.js - 如何使用 Node js 将文件正确上传到 OneDrive?无需前端身份验证即可获取访问令牌
- rust - wasm-pack 代码中的 Rust 导入导致 JS 错误
- openssl - openSSL SSL_CTX_set1_sigalgs() API 返回 0(失败)
- javascript - 如何单击父 div 内的所有链接?
- node.js - node.js 服务器:服务于虚拟子目录
- mysql - 当在 SELECT 中使用计数变量时,有人可以解释 MySQL 中 ORDER BY 和 SELECT 的执行顺序吗?
- python - 如何使用 pods/exec Api-Group 将文件从远程 pod 复制到当前 pod [远程文件是 pcap]
- javascript - 将电子窗口从左下角调整到右上角?
- css - 如何用 React 用效果替换图像?