我是 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()