Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask助手类和返回值_Python_Oop_Flask_Flask Sqlalchemy_Flask Login - Fatal编程技术网

Python Flask助手类和返回值

Python Flask助手类和返回值,python,oop,flask,flask-sqlalchemy,flask-login,Python,Oop,Flask,Flask Sqlalchemy,Flask Login,问候, 我正在使用Flask并尝试创建一些助手类,而不是在“controllers”/“routes”中执行数据逻辑,但我的问题是它似乎根本没有返回任何内容,因此我正在努力从中实际获取任何数据 我正在使用的相关文件夹结构如下所示: [app] ├── main_blueprint │ ├── __init__.py │ ├── controller.py │ └── forms.py ├── classes │ ├── __init__.py │ └── auth.py

问候,

我正在使用Flask并尝试创建一些助手类,而不是在“controllers”/“routes”中执行数据逻辑,但我的问题是它似乎根本没有返回任何内容,因此我正在努力从中实际获取任何数据

我正在使用的相关文件夹结构如下所示:

[app]
├── main_blueprint
│    ├── __init__.py
│    ├── controller.py
│    └── forms.py
├── classes
│   ├── __init__.py
│   └── auth.py
├── __init__.py
├── models.py
└── ...
好的,在我的
main\u蓝图中。\uuuu init\uuuu.py
我只是做了一个蓝图并命名为main

在模型中,我使用炼金术作为ORM模型。在这里我使用模块插件,比如

  • 烧瓶登录
  • werkzeug.security
auth.py 在这里,我试图创建一个用于身份验证的帮助器类,它将为特定任务执行选定的工作。 目前看来:

from ..models import User
from flask.ext.login import login_required, login_user, logout_user
from flask import render_template, redirect, url_for, request

class Auth():
    def login(self, email, password, remember_me):
        user = User.query.filter_by(user_email=email).first()
        if user is None or not user.verify_password(password):
            return redirect(url_for('main.none'))
        login_user(user, remember_me)
        return redirect(url_for('main.yes'))
但我的问题是,我试图用一个方法初始化对象,它根本不指向任何东西,我甚至尝试为类Auth()创建一个小方法

看看它是否会重定向,但没有运气

controller.py 这里是controller.class

from flask import render_template, redirect, url_for, request
from .forms import LoginForm
from flask.ext.login import login_required, login_user, logout_user
from ..classes.auth import Auth

@main.route('/none')
def none():
    test = 'not working'
    return render_template('index.html', test=test)

@main.route('/yes')
@login_required
def yes():
    test = 'yes working'
    return render_template('index.html', test=test)
以及我的登录路径:

@main.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        a = Auth()
        a.login(form.username.data, form.password.data, form.remember_me.data)
    return render_template('login.html', form=form)
但问题是,如果我没有将它创建为一个helper类,它就会工作

 @main.route('/login', methods=['GET', 'POST'])
 def login():
     form = LoginForm()
     if form.validate_on_submit():
        return redirect(url_for('main.index'))
        # TODO Craete all this in a class
        user = User.query.filter_by(user_email=form.username.data).first()
        if user is None or not user.verify_password(form.password.data):
            return (url_for('main.none', **request.args))
        login_user(user, form.remember_me.data)            
        return redirect(request.args.get('next') or url_for('main.yes'))
        # End Class
     return render_template('login.html', form=form)
用户模型 lm是loginmanager对象

所以我的问题很简单,我应该如何将逻辑转换成类?(某种抽象层类)。在你们提问之前,为什么不让它成为一个脚本(函数)而不是一个类,是因为我以后会创建帮助器类,它将作为一个对象被需要,所以为什么不学习OOP方式呢?;)


提前感谢

您忘记了
退货

@main.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        a = Auth()
        # without this return it will fall through to render_template
        return a.login(form.username.data, form.password.data, form.remember_me.data)
    return render_template('login.html', form=form)

Auch,非常感谢dirn!它让我挣扎了好几个小时,并没有想到仅仅增加回报!我认为将它添加到方法中就足够了!干杯
in case you need to see the User model:
from werkzeug.security import generate_password_hash, check_password_hash
from flask.ext.login import UserMixin

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_email = db.Column(db.String(128), unique=True)
    user_password = db.Column(db.String(128))

    @property
    def password(self):
        raise AttributeError('password is not a readable attribute')

    @password.setter
    def password(self, password):
        self.user_password = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.user_password, password)

# TODO create this in user class DAO
@lm.user_loader
def load_user(id):
    return User.query.get(int(id))
# END
@main.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        a = Auth()
        # without this return it will fall through to render_template
        return a.login(form.username.data, form.password.data, form.remember_me.data)
    return render_template('login.html', form=form)