問候,瓶輔助類和返回值
我與瓶的工作,並試圖創造一些輔助類,而不是在「控制器」 /「航線」做數據的邏輯,但我的問題是,它似乎沒有返回任何東西,因此我正努力從其中獲取任何數據。
相關的文件夾結構,我使用這樣的容貌:
[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方式? ;)
預先感謝
奧赫,非常感謝!它掙扎着我幾個小時,並沒有想到只是增加回報!我認爲這足以將其添加到方法中!乾杯! – Sigils 2014-09-26 11:35:54