python - 类 NameError:名称未定义
问题描述
我正在 pythonanywhere.com 和 MySQL DB 上使用 Flask 构建一个小网站。
数据库是“********$registeredUser”,第一个表是用户登录系统(“registeredUsers”)。创建一个用户:
usr = User("n@k.com","john","muller","passwordhash")
db.session.add(usr)
db.session.commit()
这有效......但我想为一些消息创建一个名为“comments”的第二个表。我重复这一步:
com = Comment("this is a test comment")
db.session.add(com)
db.session.commit()
但在第一行是错误
r = Comment("this is a test comment")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Comment' is not defined
这是代码...
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_login import login_user, LoginManager, UserMixin, login_required, logout_user, current_user
from werkzeug.security import check_password_hash, generate_password_hash
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["DEBUG"] = True
app.secret_key = "cjkm1093f1uomes2oipd98wmfdtwkp"
login_manager = LoginManager()
login_manager.init_app(app)
#Configure DB Connection Settings
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
username="nilskreie",
password="12345678",
hostname="********.mysql.pythonanywhere-services.com",
databasename="********$registeredUsers",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
class User(UserMixin, db.Model):
__tablename__ = "registeredUsers"
id = db.Column(db.Integer, primary_key=True)
mail = db.Column(db.String(128))
firstName = db.Column(db.String(128))
lastName = db.Column(db.String(128))
password_hash = db.Column(db.String(128))
email_confirmed = db.Column(db.String(128))
vote = db.Column(db.Integer)
def __init__(self, mail, firstName, lastName, password_hash):
self.mail = mail
self.firstName = firstName
self.lastName = lastName
self.password_hash = generate_password_hash(password_hash)
self.email_confirmed = False
self.vote = 0
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def get_id(self):
return self.mail
class Comment(db.Model):
__tablename__ = "comments"
id = db.Column(db.Integer, primary_key=True)
mail = db.Column(db.String(128))
msg = db.Column(db.String(1024))
def __init__(self, mail, msg):
self.mail = "place@holder.com"
self.msg = 0
def get_id(self):
return self.mail
可能是什么问题呢?提前谢谢了!
解决方案
想通了 - 不是代码是问题。
pythonanywhere 有一个“重新加载”按钮和一个“运行”按钮。
我总是按“重新加载”,用“运行”就可以了!
推荐阅读
- karate - 如何在空手道工具的 API 请求中传递动态值?
- javascript - 使用 Flask 的 send_file 提供文件,然后重定向到另一个页面
- python - x11vnc 连接意外断开
- java - 由于错误代码 20,无法安装 DialogOS
- scala - 什么是 Scala 中的单元类型行为
- go - Golang 会话工作但需要根据值是否存在来验证路由
- reactjs - 令牌过期时React应用无法登录Keycloak,无限循环,刷新令牌错误
- .net - 哪个池映像更适合在 azure 批处理服务上执行具有更快横向扩展的 exe (.Net Framework 4.5)?
- javascript - ESLint 和后向断言
- node.js - Node 中 PDF 的到期日期