gpt4 book ai didi

python - Flask - 如何重用 URL 参数替换函数?

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:29 25 4
gpt4 key购买 nike

我正在尝试构建一个基于字符串自动构建重定向 url 的 View 类,例如:

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)

如何在我的 RedirectView 类中实现 replace_parameters,使其表现得与 Flask 的路由参数替换功能完全一样?

我认为这个问题主要与了解 Flask 内部 API 有关,我找不到完成这部分的方法。

最佳答案

使用 url_for 将是最 Flasky 的做法。使用它的目的是将您的代码与 URL 分离,您只需引用 View /路由名称。在您共享的特定情况下,它看起来像这样:

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' 的 View 的名称。

Hereurl_for的API引用文档。它可以处理带有路径变量名称的关键字参数。

关于python - Flask - 如何重用 URL 参数替换函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com