这是我的
app.py
文件,当我使用 Flask 运行时,但是当我使用 Flask 运行它并尝试登录时,它显示此错误
app.py
文件
from flask import Flask, render_template, request, redirect, url_for, session
import json,admin,teacher,student,quiz_api
from models import Student, Teacher, db, app
# from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = 'secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///quiz.db'
db = SQLAlchemy(app)
with app.app_context():
db.create_all()
# db.create_all()
@app.route('/')
def index():
return render_template("index.html")
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user_type = request.form['type']
if user_type == 'Teacher':
user = Teacher.query.filter_by(username=username).first()
if user is None:
return "incorrect username"
else:
if user.password == password:
session['username'] = username
session['id'] = user.id
return redirect(url_for('teacher_index'))
else:
return "incorrect password"
if user_type == 'Admin':
if username == 'admin' and password == 'admin':
print("inside admin ------")
return redirect(url_for('admin'))
else:
user = Student.query.filter_by(username=username).first()
if user is None:
return "incorrect username"
else:
if user.password == password:
session['username'] = username
session['id'] = user.id
return redirect(url_for('student_index'))
else:
return "incorrect password"
@app.route("/logout", methods=['POST'])
def logout():
session.pop('username', None)
return redirect(url_for('index'))
if __name__ == "__main__":
app.secret_key = 'super secret key'
app.config['SESSION_TYPE'] = 'filesystem'
app.debug = True
app.run()
这是另一个我想要重定向的
admin.py
文件
管理员.py
from flask import render_template, request, redirect, url_for
from models import Teacher, Student, Score, Quiz, app, db
@app.route('/admin')
def admin():
print("hello inside admin")
if 'username' == None:
return redirect(url_for("index"))
teachers = Teacher.query.all()
students = Student.query.all()
user_data = {'students': students, 'teachers': teachers}
print(user_data)
return render_template("admin.html", user_data=user_data)
@app.route('/delete_student/<student_id>')
def delete_student(student_id):
student = Student.query.filter_by(id=student_id).first()
student_quiz_scores = Score.query.filter_by(student_id=student.id).all()
for student_score in student_quiz_scores:
db.session.delete(student_score)
db.session.commit()
db.session.delete(student)
db.session.commit()
return redirect(url_for('admin'))
@app.route('/delete_teacher/<teacher_id>')
def delete_teacher(teacher_id):
teacher = Teacher.query.filter_by(id=teacher_id).first()
# quizes_of_teacher = Quiz.query.filter_by(teacher_id=teacher.id)
for quiz in Quiz.query.filter_by(teacher_id=teacher.id):
db.session.delete(quiz)
db.session.commit()
db.session.delete(teacher)
db.session.commit()
return redirect(url_for('admin'))
@app.route('/update_teacher', methods=['POST', 'GET'])
def update_teacher():
teacher_id = request.form['t_id']
teacher_username = request.form['t_username']
teacher_password = request.form['t_password']
teacher = Teacher.query.filter_by(id=teacher_id).first()
teacher.username = teacher_username
teacher.password = teacher_password
db.session.commit()
return redirect(url_for('admin'))
@app.route('/update_student', methods=['POST', 'GET'])
def update_student():
student_id = request.form['s_id']
student_username = request.form['s_username']
student_password = request.form['s_password']
student = Student.query.filter_by(id=student_id).first()
student.username = student_username
student.password = student_password
db.session.commit()
return redirect(url_for('admin'))
@app.route("/insert_teacher", methods=['POST'])
def insert_teacher():
name = request.form["teacher_name"]
password = request.form["teacher_password"]
teacher = Teacher.query.filter_by(username=name).first()
if teacher is None:
teacher = Teacher(username=name, password=password)
db.session.add(teacher)
db.session.add(teacher)
db.session.commit()
return redirect(url_for("admin"))
else:
return "404 Duplicate Name Error!"
@app.route("/insert_student", methods=['POST'])
def insert_student():
name = request.form["student_name"]
password = request.form["student_password"]
student = Student.query.filter_by(username=name).first()
if student is None:
student = Student(username=name, password=password)
db.session.add(student)
db.session.commit()
return redirect(url_for("admin"))
else:
return "404 Duplicate Name Error!"
但显示以下错误
inside admin ------
[2024-04-26 22:22:52,567] ERROR in app: Exception on /login [POST]
Traceback (most recent call last):
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\app.py", line 1463, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\app.py", line 872, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\app.py", line 870, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\app.py", line 855, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\temp\Quiz\quiz_management_system_final\app.py", line 43, in login
return redirect(url_for('admin'))
^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\helpers.py", line 220, in url_for
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\flask\app.py", line 1074, in url_for
return self.handle_url_build_error(error, endpoint, values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rv = url_adapter.build( # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\vatsal\miniconda3\Lib\site-packages\werkzeug\routing\map.py", line 919, in build
raise BuildError(endpoint, values, method, self)
谁能告诉我哪里出错了
由于您的管理路由位于不同的模块中,请尝试以下操作:
return redirect(url_for('admin.admin'))
其中第一个“admin”是模块名称。