私は5月のアプリでフラスコログインを使用しようとしています:
私のコントローラー:
@app.route("/process_log", methods=['POST'])
def process_login():
filled_form = LoginForm(request.form)
if filled_form.validate():
phone = filled_form.phone.data
password = filled_form.password.data
if User.phone_exists(phone) and User.pass_match(phone, password):
user = User.get_by_phone(phone)
login_user(user.get_id)
return redirect(url_for("index"))
else:
return render_template("login.html", form = filled_form, error = u"Не верный логин или пароль")
else:
return render_template("home.html", form = filled_form)
そして、フラスコログインのAPIに必要な関数が定義されたクラスがいくつかあります
私のユーザークラス:
from pymongo import MongoClient
from bson.objectid import ObjectId
class User():
client = MongoClient()
db = client['test']
col = db['user']
user_id = None
def __init__(self, dic):
self.dic = dic
def is_authenticated():
return True
def is_anonymous():
return False
def is_active():
return True
def get_id(self):
return unicode(str(self.user_id))
def save(self):
self.user_id = self.col.insert(self.dic)
print "Debug:" + str(self.user_id)
@staticmethod
def _get_col():
client = MongoClient()
db = client['test']
col = db['user']
return col
@staticmethod
def phone_exists(phone):
col = User._get_col()
if col.find_one({'phone': phone}) != None:
return True
else:
return False
@staticmethod
def pass_match(phone, password):
col = User._get_col()
if col.find_one({'phone': phone})['password'] == password:
return True
else:
return False
@staticmethod
def get(userid):
col = User._get_col()
return col.find_one({'_id':userid})
@staticmethod
def get_by_phone(phone):
col = User._get_col()
dic = col.find_one({'phone': phone})
print dic['password']
return User(dic)
ご覧のとおり、関数 is_active が定義されています(注:私も自分自身で参照を渡そうとしました)
しかし、私はまだこのエラーAttributeError: 'function' object has no attribute 'is_active' を持っています
ここでコードが多すぎて申し訳ありませんが、かなり簡単なはずです。
注: 私は自分のプロジェクトに mongodb を使用しています。
エラーを見つけるのを手伝ってください。ありがとうございます
もう 1 つ: login_user(....) に Id またはユーザー オブジェクトを指定する必要がありますか?