gpt4 book ai didi

python - Flask Shell 命令不起作用

转载 作者:太空狗 更新时间:2023-10-29 22:03:59 24 4
gpt4 key购买 nike

我是 python 和 flask 的新手,目前正在研究 Flask Mega-Tutorial ,但是:我一直在获取 flask shell识别我的自定义符号/命令。

当我尝试访问模型时 User通过键入 flask shell 作为符号在我的虚拟环境中,我得到 NameError: name 'User' is not defined .

User应该返回:<class 'application.models.User'> ,而是显示错误。

我不明白的是 app符号似乎工作正常并返回 <Flask 'application'>应该如此。

我在这里做错了什么?进口的东西?

我做了一些研究:this看起来像我的问题,但不使用 app.sell_context_processor装饰器。

我还尝试了我的代码的变体:既改变了从应用程序到应用程序的导入名称,因为我在教程中更改了这些默认值,并使用了user而不是 User (小写与大写),但似乎没有任何效果。

请帮我解决这个问题!

错误

    (venv) MBP:books mbpp$ flask shell
Python 3.6.5 (default, Mar 30 2018, 06:42:10)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
App: application
Instance: /Users/mbpp/Sites/books/instance
>>> app
<Flask 'application'>
>>> User
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'User' is not defined

我的代码 来自 application.py

   from application import app, db
from application.models import User, Book, State, Course, BookTitle, Author

@app.shell_context_processor
def make_shell_context():
return {'db': db, 'User': User, 'State': State, 'BookTitle': BookTitle, 'Author': Author}

来自__init__.py

    from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager

# initiate the Flask app
app = Flask(__name__)

# use the config.py file for configuration
app.config.from_object(Config)

# use SQLAlchemy for database management
db = SQLAlchemy(app)

# use Flask-Migrate extension for database migration management
migrate = Migrate(app, db)

# use Flask-Login extension for login form
login = LoginManager(app)
login.login_view = 'login'

from application import routes, models

来自 models.py(我正在构建一个用户可以卖书的网站)

   from application import db, login
from datetime import datetime
from werkzeug.security import generate_password_hash,
check_password_hash
from flask_login import UserMixin

# create a table to store users
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(64), index = True, unique = True)
email = db.Column(db.String(120), index = True, unique = True)
password_hash = db.Column(db.String(128))
phone = db.Column(db.String(64))
books = db.relationship('Book', backref='seller_name', lazy='dynamic')

def __repr__(self):
return '<User: {}>'.format(self.username)

# create a password hash
def set_password(self, password):
self.password_hash = generate_password_hash(password)

# check the password hash against a user given password
def check_password(self, password):
return check_password_hash(self.password_hash, password)

# create a table to store information on a book for sale
class Book(db.Model):
id = db.Column(db.Integer, primary_key = True)
course_id = db.Column(db.Integer, db.ForeignKey('course.id'))
title = db.Column(db.Integer, db.ForeignKey('booktitle.id'))
author = db.Column(db.Integer, db.ForeignKey('author.id'))
price = db.Column(db.Integer)
isbn = db.Column(db.String(64), index = True)
state_id = db.Column(db.Integer, db.ForeignKey('state.id'))
state_description = db.Column(db.String(256))
seller_id = db.Column(db.Integer, db.ForeignKey('user.id'))
creation_timestamp = db.Column(db.DateTime, index = True, default = datetime.utcnow)

def __repr__(self):
return '<Book: {}>'.format(self.title)

# create a table to store different states books can be in
class State(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(128), index = True)
books = db.relationship('Book', backref='state', lazy='dynamic')

def __repr__(self):
return '<State: {}>'.format(self.name)

# create a table to store courses
class Course(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(128), index = True)
year = db.Column(db.Integer, index = True)
books = db.relationship('Book', backref='course', lazy='dynamic')

def __repr__(self):
return '<Course: {}>'.format(self.name)

# create a table to store booktitles
class BookTitle(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(128), index = True)
books = db.relationship('Book', backref='book_title', lazy='dynamic')

def __repr__(self):
return '<Book title: {}>'.format(self.title)

# create a table to store authors
class Author(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(128), index = True)
books = db.relationship('Book', backref='author_name', lazy='dynamic')

def __repr__(self):
return '<Author: {}>'.format(self.name)

# user loader for Flask-Login extension, gets users ID
@login.user_loader
def load_user(id):
return User.query.get(int(id))

最佳答案

非常感谢 Miguel , FLASK Mega Tutorial ( go check that out ) 的作者解决了我的问题!

正如他在 a comment below my question 中指出的那样: 你不能有同名的模块和包。所以不能同时有application文件夹和application.py。

解决方案:

我将我的“application.py”更改为“theapp.py”,现在 flask shell 工作得很好!除了在终端中运行 export FLASK_APP=theapp.py 之外,我不需要更改文件中的任何内容。

关于python - Flask Shell 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com