所以我用mongoDB、flask和Python做了一个小型的个人图书馆应用程序,你可以在上面输入你的书的条目,并把它们保存在一个类似账户/登录的地方。问题是,我不能让表单本身ping这个函数来编辑东西。我知道我的目标是错误的,但我觉得我需要有人像我五岁时一样解释我哪里出错了。
这就是函数:
@app.route("/profile/<username>", methods=["GET", "POST"])
def edit_book(book_id, username):
if request.method == "POST":
submit = {
"category_name": request.form.get("category_name"),
"title": request.form.get("title"),
"author": request.form.get("author"),
"genre": request.form.get("genre"),
"rating": request.form.get("rating"),
"release_date": request.form.get("release_date"),
"publisher": request.form.get("publisher"),
"page_count": request.form.get("page_count"),
"isbn": request.form.get("isbn")
}
mongo.db.booksread.update_one({"_id": ObjectId(book_id)}, submit)
mongo.db.bookstoberead.update_one({"_id": ObjectId(book_id)}, submit)
flash("Book Entry Edited")
unreadbooks = mongo.db.bookstoberead.find_one({"_id": ObjectId(book_id)})
books = mongo.db.booksread.find_one({"_id": ObjectId(book_id)})
categories = mongo.db.reading_list.find().sort("category_name", 1)
return redirect(url_for("profile", booksread=books, readinglist=categories, bookstoberead=unreadbooks))
这是与之相关联的后置操作:
<form class="col s12" method="POST" action="{{ url_for('edit_book', book_id=book_id, username=username) }}">
repos在这里(Personal Library App),具有所有功能的应用程序在“app.py“下,表单链接的页面在templates文件夹下的“profile.html”。
实时预览是On Heroku,如果这有助于查看事物链接在一起的位置。您可以使用Tester/Tester 1的用户名/密码进行访问。
我试过为post操作、函数和路径传递不同的参数。我不知道我是否传递了错误的参数,或者是否错过了一些示例,我仍然对参数非常非常模糊。我试过了解一些文档的头或尾,但有些东西就是不点击。
任何和每一件帮助是绝对感谢。
1条答案
按热度按时间smtd7mpg1#
在Flask中,可以向Route添加变量,然后将其作为关键字参数传递给视图函数。在示例中,您定义了一个具有两个参数
book_id
和username
的方法。但在路由中,您仅将username
定义为变量@app.route("/profile/<username>", ...)
。当flask尝试只使用用户名调用您的方法时,这将导致类型错误。
因为您还没有发布错误消息,所以我只能假设引发了类似下面的错误消息。
TypeError: edit_book() missing 1 required positional argument: 'book_id'
由
url_for('edit_book', book_id=book_id, username=username)
方法生成的URL不会引发任何错误,并构建一个类似profile/exampleuser?book_id=99
的URL,其中所有未知参数都作为查询参数。作为一种修复方法,您可以简单地添加book_id作为第二个路由变量。
有关其他信息,请查看: