2014-09-26 50 views
0

問候,瓶輔助類和返回值

我與瓶的工作,並試圖創造一些輔助類,而不是在「控制器」 /「航線」做數據的邏輯,但我的問題是,它似乎沒有返回任何東西,因此我正努力從其中獲取任何數據。

相關的文件夾結構,我使用這樣的容貌:

[app] 
├── main_blueprint 
│ ├── __init__.py 
│ ├── controller.py 
│ └── forms.py 
├── classes 
│ ├── __init__.py 
│ └── auth.py 
├── __init__.py 
├── models.py 
└── ... 

以及在我main_blueprint.__init__.py我只是簡單地做了一個藍圖,並把它命名爲主要

,並在模型中我使用燒瓶,SQLAlchemy的作爲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')) 

但我的問題是,我嘗試初始化與方法的對象,它沒有引導到任何東西,我甚至嘗試創建類驗證一個小方法()

def test(self): 
     return redirect(url_for('main.index')) 

看看它是否會重定向,但沒有運氣。

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) 

但事情是,如果我沒有創建它作爲一個幫手類它正在工作,

@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) 

用戶模型

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 

lm是loginmanager對象。

所以我的問題很簡單,我應該如何將邏輯轉換爲類? (某種抽象圖層類)。並且在你問之前,爲什麼不把它作爲腳本(函數)而不是類,是因爲我稍後將創建輔助類,這將作爲對象被需要,所以爲什麼不學習OOP方式? ;)

預先感謝

回答

2

你忘了return

@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) 
+0

奧赫,非常感謝!它掙扎着我幾個小時,並沒有想到只是增加回報!我認爲這足以將其添加到方法中!乾杯! – Sigils 2014-09-26 11:35:54