【问题标题】:name 'ClassName' is not defined名称“ClassName”未定义
【发布时间】:2017-12-09 19:44:38
【问题描述】:

我的Flask 项目结构如下:

matcha
    |- matcha
           |- template
              static
              __init__.py
              matcha.py
              user.py

user.py

class User():
    def __init__(self):
        db = get_db()
    def login(username, password):
        ...
    def register(email, username, firstname, lastname, password):
        ...

matcha.py中,我创建了user 类的引用,并在/login 页面上尝试从user 类文件中调用login() 方法。

import os
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from . import user

app = Flask(__name__)
app.config.from_object(__name__)
user = User()

...    

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if user.login(username, password):
            return redirect(url_for('index'))
        else:
            error = "Invalid username or password"
    return render_template('login.html', error=error)

完整追溯:

File "c:\users\stanc\desktop\matcha\matcha\__init__.py", line 1, in <module>
from .matcha import app
File "c:\users\stanc\desktop\matcha\matcha\matcha.py", line 8, in <module>
user = User()
NameError: name 'User' is not defined

【问题讨论】:

  • 发布完整的回溯。
  • 也许可以试试user = user.User() ? (为实例使用另一个名称 user 可能会更好地不要隐藏模块 user

标签: python class flask import module


【解决方案1】:

据我所知,您导入的是 user 模块,而不是 User 编写在 user 模块中的类。

因此,您需要将代码重写为,

from .user import User  # change your import to this
user = User()

我很确定这会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2018-01-24
    • 2018-02-21
    相关资源
    最近更新 更多