我正在尝试使用 Flask-Mongoengine 和 Flask-Login 为应用程序编码授权。我收到了这个奇怪的错误:
File "/usr/lib/python3.5/site-packages/mongoengine/base/document.py", line 188, in __setattr__
super(BaseDocument, self).__setattr__(name, value)
File "/usr/lib/python3.5/site-packages/mongoengine/base/fields.py", line 132, in __set__
if instance._initialised:
AttributeError: _initialised
Run Code Online (Sandbox Code Playgroud)
我的models.py:
from app import app, db
from flask.ext.login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_lenght=40, required=True)
last_name = db.StringField(max_lenght=40, required=True)
password = db.StringField(required=True)
def __init__(self, email, first_name, last_name, password):
self.email = email
self.first_name = first_name
self.last_name = last_name
self.password = password
def is_authenticated(self):
return True
def is_active(self):
return True …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个传递键/值参数来获取对象的 get 方法。
def find_by_one(self, val, key='id'):
obj = self.__model__.objects(key=val).first()
return obj if obj else None
Run Code Online (Sandbox Code Playgroud)
我得到的错误
InvalidQueryError: Cannot resolve field "key"
Run Code Online (Sandbox Code Playgroud)
亲切地回答了我的问题。我最终改变了我的方法来传递 **kwargs 并将其作为我的查询集传递
def find_by_one(self, **kwargs):
user = self.__model__.objects(**kwargs).first()
return user if user else None
Run Code Online (Sandbox Code Playgroud)
现在我可以调用我的 find_by_one
obj.find_by_one(id=obj_id)
Run Code Online (Sandbox Code Playgroud)
代替
obj.find_by_one(obj_id)
Run Code Online (Sandbox Code Playgroud) 我有一个Text模型;
class Text(db.Document):
siphash_value = db.LongField()
Run Code Online (Sandbox Code Playgroud)
然后我用siphash lib创建一个哈希.(https://github.com/majek/pysiphash)
此lib将字符串转换为长值,如12398370950267227270L
如果我尝试将文档保存到我的数据库;
Text(siphash_value=12398370950267227270L).save()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
OverflowError: MongoDB can only handle up to 8-byte ints
Run Code Online (Sandbox Code Playgroud) 基于本教程,我正在尝试创建一个表单来进行一些测量.似乎显示数据的部分正在工作,但是当使用model_form命令生成输入表单时,它会突然出现以下错误:
在转换'description'中输入文件"/myproject/lib/python3.4/site-packages/flask_mongoengine/wtf/orm.py",第49行:field.help_text或'',
AttributeError:'ObjectIdField'对象没有属性'help_text'
错误发生在我的代码的这一行:
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
Run Code Online (Sandbox Code Playgroud)
这是我的view.py代码:
from flask import Blueprint, request, redirect, render_template, url_for
from flask.views import MethodView
from flask.ext.mongoengine.wtf import model_form
from pyReefLog.models import Measurement
measurements = Blueprint('measurements', __name__, template_folder='templates')
class List(MethodView):
cls = Measurement
def get(self):
measurements = self.cls.objects.all()
return render_template('measurements/list.html', measurements=measurements)
class Detail(MethodView):
def get_context(self, creator=None):
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
if creator:
measurement = Measurement.objects.get_or_404(creator=creator)
if request.method == 'POST':
form = form_cls(request.form, inital=measurement._data)
else:
form = …Run Code Online (Sandbox Code Playgroud) 我们计划使用 Flask 和 Mongoengine 开发一个应用程序。然而,我们已经在非 Flask 应用程序中使用了一些 mongoengine 文档定义,如果可能的话,我们希望将这些定义重构到一个包中,以便在 Flask 和非 Flask 应用程序中使用它。
这可能吗?我已经阅读了 Flask Mongoengine 的初始化代码,它似乎只是覆盖了文档的一些基类,并从 Flask 应用程序中提取配置。另外,我发现了这个(未回答的)问题: