Skip to main content
 首页 » 编程设计

flask之NameError : global name 'form' is not defined. Flask-MySQL

2025年05月04日21sharpest

我是 Python 和 Flask 的新手。我尝试创建一个网站,您可以在其中添加书籍并将它们写入 MySQL 数据库。当我使用 PyCharm 运行我的项目时,它工作正常,直到我导航到我想添加书籍的站点。 错误显示:NameError:未定义全局名称“form”。 有人可以帮我解决这个问题吗?也许我在错误的地方写了代码,我不知道。

我的代码是:

views.py:

from flask import render_template, flash, redirect, session, url_for, request 
from flask.ext.login import login_user, logout_user, current_user, login_required 
from app import app, db, mysql 
from .forms import LoginForm, AddForm, RegForm 
from .models import User 
 
@app.route('/books/add/admin', methods=['GET', 'POST']) 
def books_add_admin(): 
    add = AddForm() 
 
    if request.method == 'POST': 
        cursor = mysql.connect().cursor() 
             ''' 
             cursor = mysql.get_db().cursor() 
             author = request.args.get(form.author.data) 
             ''' 
        test = request.args.get(form.title.data) 
        author = request.args.get(form.author.data) 
        verlag = request.args.get(form.publisher.data) 
        isbn = request.args.get(form.isbn.data) 
        auflage = request.args.get(form.edition.data) 
        exemplare = request.args.get(form.copies.data) 
        kurztext = request.args.get(form.short_text.data) 
        cursor.execute("INSERT INTO books (Titel, Autor, Verlag, ISBN, Auflage, Info) 
        VALUES (titel, author, verlag, isbn, auflage, info);") 
 
             #cursor = mysql.connect().cursor() 
        con.commit() 
        curser.close() 

以及forms.py的代码:

from flask.ext.wtf import Form 
from wtforms import StringField, IntegerField, BooleanField, PasswordField, validators, 
TextAreaField 
from wtforms.validators import DataRequired, Length 
 
 
class LoginForm(Form): 
    student_number = IntegerField('student_number', validators=[DataRequired()]) 
    password = PasswordField('password', validators=[DataRequired()]) 
    #remember_me = BooleanField('remember_me', default=False) 
 
class AddForm(Form): 
    title = StringField('title', validators=[DataRequired()]) 
    author = StringField('author', validators=[DataRequired()]) 
    publisher = StringField('publisher', validators=[DataRequired()]) 
    isbn = IntegerField('isbn', validators=[Length(min=10, max=13)]) 
    edition = IntegerField('edition', validators=[Length(min=1, max=3)]) 
    copies = IntegerField('copies', validators=[Length(min=1, max=3)]) 
    short_info = TextAreaField('short_info', validators=[Length(min=0, max=1040)]) 
 
class RegForm(Form): 
    student_number = IntegerField('student_number', validators=[Length(min=6, max=7)]) 
    forname = StringField('forname', validators=[DataRequired()]) 
    surname = StringField('surname', validators=[DataRequired()]) 
    email = StringField('email', validators=[DataRequired()]) 
    password = PasswordField('password', validators=[Length(min=6, max=24)]) 
    password2 = PasswordField('password2', validators=[Length(min=6, max=24)]) 

请您参考如下方法:

这似乎是问题所在:

add = AddForm() 

您将变量命名为 add,而您正试图在此处引用变量 form:

test = request.args.get(form.title.data) 
author = request.args.get(form.author.data) 
verlag = request.args.get(form.publisher.data) 
isbn = request.args.get(form.isbn.data) 
auflage = request.args.get(form.edition.data) 
exemplare = request.args.get(form.copies.data) 

最简单的解决方案是重命名您的变量:

form = AddForm()