即使用户密码和用户名正确也无法重定向

问题描述 投票:0回答:1

这是我的

app.py
文件,当我使用 Flask 运行时,但是当我使用 Flask 运行它并尝试登录时,它显示此错误 enter image description here

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)

谁能告诉我哪里出错了

python python-3.x flask
1个回答
0
投票

由于您的管理路由位于不同的模块中,请尝试以下操作:

return redirect(url_for('admin.admin'))

其中第一个“admin”是模块名称。

© www.soinside.com 2019 - 2024. All rights reserved.