【问题标题】:Kept getting werkzeug.routing.BuildError不断收到 werkzeug.routing.BuildError
【发布时间】:2020-05-03 17:15:24
【问题描述】:

我尝试运行代码并得到这个 werkzeug.routing.BuildError: Could not build url for endpoint 'book'。您指的是“sign_in”吗? 另外,如果我尝试访问 /main 路由,它会显示在服务器上找不到 URL。谁能帮帮我。

import os
import csv
from flask import Flask, session, render_template, request
from flask_session import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

app = Flask(__name__)

# Check for environment variable
if not os.getenv("DATABASE_URL"):
    raise RuntimeError("DATABASE_URL is not set")

# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

# Set up database
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))


f = open("books.csv")
reader = csv.reader(f)
for isbn, title, author, year in reader:
    db.execute("INSERT INTO books (ISBN, title, author, year) VALUES (:ISBN, :title, :author, :year)",
               {"ISBN": isbn, "title": title, "author": author, "year": year})
    print(f"Added flight from {isbn} to {year} lasting {title} minutes.")
db.commit()



@app.route("/")
def sign_in():
    return render_template("Sign.html")

@app.route("/main" method = "POST")
def book():
    name = request.form.get("name")
    return render_template("books.html", username=name)

这是 sign.html 文件

{% extends "layout.html" %}


{% block title %}Sign in{% endblock %}

{% block body %}


  <div class="main">
    <p class="sign" align="center">Sign in</p>
    <form action= "{{ url_for('book') }}" class="form1" method="post">
      <input name = "name" class="un " type="text" align="center" placeholder="Username">
      <input class="pass" type="password" align="center" placeholder="Password">
      <button class="submit" align="center">Sign in</button>
    </form>              

    </div>


            {% endblock %}

这是books.html 文件

{% extends "layout.html" %}

{% block title %} {{username}} {% end block%}

{% block body%}

{% end block %}

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy psql


    【解决方案1】:
    @app.route("/main" method = "POST")
    

    这行有两点错误:

    • "/main" 后面没有逗号(它应该会导致语法错误,所以我假设它只是在 sn-p 中丢失了)
    • 端点的允许方法是使用关键字参数methods 定义的,作为字符串的可迭代对象,因此在您的代码中它应该像methods = ["POST"] 而不是method = "POST"

    但是,在最新版本的 Flask (1.1.2) 中,第二个问题应该会导致 TypeError,所以也许您使用的是一些不处理这种情况的旧版本,结果是端点不存在.

    【讨论】:

    • 我正在使用最新版本的烧瓶,在更正错误后,它仍然无法正常工作。好郁闷
    • 你能显示layout.html的代码吗?另外,运行应用程序的代码在哪里?
    猜你喜欢
    • 2017-11-03
    • 2020-11-26
    • 2014-12-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多