Продолжал получать werkzeug.routing.BuildError - PullRequest
0 голосов
/ 03 мая 2020

Я попытался запустить код и получил werkzeug.routing.BuildError: Не удалось создать URL для конечной точки '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)

Это знак. 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 %}

Это книги. html документ

{% extends "layout.html" %}

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

{% block body%}

{% end block %}

1 Ответ

0 голосов
/ 03 мая 2020
@app.route("/main" method = "POST")

В этой строке две ошибки:

  • без запятой после "/main" (это должно вызвать синтаксическую ошибку, поэтому я предполагаю, что она просто потерялась во фрагменте)
  • разрешенные методы для конечной точки определяются с помощью ключевого аргумента methods как итерируемой строки, поэтому в вашем коде она должна go походить на methods = ["POST"] вместо method = "POST".

Однако в последней версии Flask (1.1.2) вторая проблема должна вызывать TypeError, поэтому, возможно, вы используете более старую версию, которая не обрабатывает такой случай, и в результате конечная точка не есть.

...