[英]Importing from __init__ in flask project same directory
init .py 和 models.py 在同一個目錄(myproject)
myproject | -- __init__.py -- models.py | app.py
當我嘗試從 init 中導入 models.py 中的內容時,我得到:
ModuleNotFoundError: No module named 'myproject'
我嘗試什么:
from myproject import db,login_manager
當它與 other.py 文件位於同一目錄中時,如何從 init (例如數據庫)導入某些內容?
內部初始化:
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
login_manager = LoginManager()
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' +
os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
Migrate(app,db)
login_manager.init_app(app)
login_manager.login_view = "login"
在models.py里面:
from myproject import db,login_manager
from werkzeug.security import
generate_password_hash,check_password_hash
from flask_login import UserMixin
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key = True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))
def __init__(self, email, username, password):
self.email = email
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self,password):
return check_password_hash(self.password_hash,password)
在 app.py 內部(我正在執行我的項目 - 它也可以工作)只是想知道為什么 models.py 中的導入會輸出錯誤消息
from myproject import app,db
from flask import render_template, redirect, request, url_for,
flash,abort
from flask_login import login_user,login_required,logout_user
from myproject.models import User
from myproject.forms import LoginForm, RegistrationForm
from werkzeug.security import generate_password_hash,
check_password_hash
@app.route('/')
def home():
return render_template('home.html')
-- (some more view functions) --
if __name__ == '__main__':
app.run(debug=True)
使用.
從同一級別導入。
from . import db, login_manager
您需要設置 PYTHONPATH 以便 model.py 可以找到 myproject 模塊。
如果您正在運行 flask shell,請在 myproject 目錄中嘗試以下操作
export PYTHONPATH=.
flask shell
參考: https://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.