python - werkzeug.routing.BuildError:无法为端点“配置文件”构建 url。你指的是“家”吗?使用 Flask - Python
问题描述
我有以下错误:
raise BuildError(endpoint, values, method, self) werkzeug.routing.BuildError: 无法为端点“配置文件”构建 url。你指的是“家”吗?
你能帮我解决这个问题吗?
这是主要部分,我在其中创建了一个登录名和一个寄存器,但我在用户登录并被重定向到主页的部分遇到了问题
这是我到目前为止写的:
import re
import MySQLdb
from flask import Flask, render_template, request, redirect, url_for, session
from flask_mysqldb import MySQL
app = Flask(__name__)
app.secret_key='hospital'
app.config['MYSQL_HOST']='localhost'
app.config['MYSQL_USER']='root'
app.config['MYSQL_PASSWORD']='iuliaion110899'
app.config['MYSQL_DB']='pythonlogin'
mysql = MySQL(app)
@app.route('/pythonlogin/', methods=['GET', 'POST'])
def login():
# Output message if something goes wrong...
msg = ''
# Check if "username" and "password" POST requests exist (user submitted form)
if request.method == 'POST' and 'username' in request.form and 'password' in request.form:
# Create variables for easy access
username = request.form['username']
password = request.form['password']
# Check if account exists using MySQL
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('SELECT * FROM accounts WHERE username = %s AND password = %s', (username, password,))
# Fetch one record and return result
account = cursor.fetchone()
# If account exists in accounts table in out database
if account:
# Create session data, we can access this data in other routes
session['loggedin'] = True
session['id'] = account['id']
session['username'] = account['username']
# Redirect to home page
return redirect(url_for('home'))
else:
# Account doesnt exist or username/password incorrect
msg = 'Incorrect username/password!'
# Show the login form with message (if any)
return render_template('index.html', msg=msg)
@app.route('/pythonlogin/logout')
def logout():
session.pop('loggedin', None)
session.pop('id', None)
session.pop('username', None)
return render_template(url_for('login'))
@app.route('/pythonlogin/register', methods=['GET', 'POST'])
def register():
msg = ''
if request.method == 'POST' and 'username' in request.form and 'password' in request.form and 'email' in request.form:
username = request.form['username']
password = request.form['password']
email = request.form['email']
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('SELECT * FROM accounts WHERE username = %s', (username,))
account = cursor.fetchone()
if account:
msg = 'Account already exists!'
elif not re.match(r'[^@]+@[^@]+\.[^@]+', email):
msg = 'Invalid email adress!'
elif not re.match(r'[A-Za-z0-9]+', username):
msg = 'Username must contain only characters and numbers!'
elif not username or not password or not email:
msg = 'Please fill out the form!'
else:
cursor.execute('INSERT INTO accounts VALUES (NULL, %s, %s, %s)' , (username,password,email,))
mysql.connection.commit()
msg = 'You have successfully registered!'
elif request.method == 'POST':
msg = 'Please fill out the form!'
return render_template('register.html', msg = msg)
@app.route('/pythonlogin/home')
def home():
# Check if user is loggedin
if 'loggedin' in session:
# User is loggedin show them the home page
return render_template('home.html', username=session['username'])
# User is not loggedin redirect to login page
return redirect(url_for('login'))
if __name__ == '__main__':
app.run()
主页.html
{% extends 'layout.html' %}
{% block title %}Home{% endblock %}
{% block content %}
<h2>Home Page</h2>
<p>Welcome back, {{ username }}!</p>
{% endblock %}
布局.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
</head>
<body class="loggedin">
<nav class="navtop">
<div>
<h1>Website Title</h1>
<a href="{{ url_for('home') }}"><i class="fas fa-home"></i>Home</a>
<a href="{{ url_for('profile') }}"><i class="fas fa-user-circle"></i>Profile</a>
<a href="{{ url_for('logout') }}"><i class="fas fa-sign-out-alt"></i>Logout</a>
</div>
</nav>
<div class="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
解决方案
添加profile
视图功能。
def profile():
# ...
return render_template('profile.html')
推荐阅读
- python - 字典键和值到 CSV
- python - 在不接触 Python 中的 /hosts 文件的情况下解析名称
- user-interface - IOS 网页界面视图
- python - 如何在python中制作多色seaborn线图
- c# - 如何从远程推送通知单击恢复应用程序
- javascript - 如何使用 React 在单独的 div 中动态显示 textarea 的值?
- c++ - 可以为块注释和代码的不同列限制配置 clang-format 吗?
- raku - 如何将超算子与非标量的标量一起使用?
- algorithm - 如何修复斜梯形分布采样输出样本大小
- ios - 标签栏控制器:切换到暗模式时的图标和颜色