这真的让我感到困惑,我不明白为什么。我有数据库支持的会话(使用 mongoengine),但似乎当我访问一个页面然后刷新它时,用户不再登录。本质上
request.user.is_authenticated()
Run Code Online (Sandbox Code Playgroud)
页面重置后为 False
谁有想法?在我的设置中,我有:
SESSION_ENGINE = 'mongoengine.django.sessions'
MIDDLEWARE_CLASSES = (
...
'django.contrib.sessions.middleware.SessionMiddleware',
...
Run Code Online (Sandbox Code Playgroud)
在调试页面上,我注意到一些事情:
SESSION_COOKIE_DOMAIN None
SESSION_EXPIRE_AT_BROWSER_CLOSE False
SESSION_COOKIE_AGE 1209600
Run Code Online (Sandbox Code Playgroud)
不存在的 cookie 域是否可以作为问题所在的线索?
我正在使用 Flask/Mongoengine-MongoDB 来构建我最新的 Web 应用程序。
我熟悉 Pymongo,但对像 Mongoengine 这样的对象文档映射器很陌生。
我已经设置了数据库和集合,我基本上只想查询它并返回相应的对象。这是我的 models.py...
from app import db
# ----------------------------------------
# Taking steps towards a working backend.
# ----------------------------------------
class Property(db.Document):
# Document variables.
total_annual_rates = db.IntField()
land_value = db.IntField()
land_area = db.IntField()
assessment_number = db.StringField(max_length=255, required=True)
address = db.StringField(max_length=255, required=True)
current_capital_value = db.IntField
valuation_as_at_date = db.StringField(max_length=255, required=True)
legal_description = db.StringField(max_length=255, required=True)
capital_value = db.IntField()
annual_value = db.StringField(max_length=255, required=True)
certificate_of_title_number = db.StringField(max_length=255, required=True)
def __repr__(self):
return address
def get_property_from_db(self, query_string):
if not query_string: …Run Code Online (Sandbox Code Playgroud) 当我尝试导入具有 ImageField 的 MongoEngine 类时,出现错误:
mongoengine.fields.ImproperlyConfigured: PIL library was not found
Run Code Online (Sandbox Code Playgroud)
我的班级结构是这样的:
class TrafficSign(Document):
name = StringField()
image = ImageField()
type = StringField()
desc = StringField()
source = StringField()
Run Code Online (Sandbox Code Playgroud)
有什么问题?
我开始了这个Turial,在这里
并得到这个错误
**mongoengine.errors.NotRegistered:** `Comment` has not been registered in the document registry. Importing the document class automatically registers it, has it been imported?
Run Code Online (Sandbox Code Playgroud)
任何的想法。太感谢了。
我有以下 MongoEngine 文档
{
'_id': 'some_id',
'data': 'some_data'
}
Run Code Online (Sandbox Code Playgroud)
如何delete使用 MongoEngine 编写此文档?
我试过的:
import my_collection
obj = my_collection.MyCol.objects.get(_id='some_id')
# obj is correctly found - let's continue
obj.delete()
# mongoengine.errors.ValidationError: 'None' is not a valid ObjectId
obj.delete('some_id')
# TypeError: delete() takes 1 positional argument but 2 were given
obj.delete(_id='some_id')
# mongoengine.errors.ValidationError: 'None' is not a valid ObjectId
Run Code Online (Sandbox Code Playgroud)
--注意
奇怪的是,以下工作完美:
my_collection.MyCol.objects.delete()
# delete all documents in the collection
Run Code Online (Sandbox Code Playgroud)
但是我已经关注了MongoEngine文档,但仍然无法仅删除一个特定的文档。
关于其中一个或两个案例的慢速MongoDB聚合,有很多问题:
令我困扰的是,在我正在设置的原型中,我的查询始终非常缓慢,其中:
此查询lookup对要检索的主文档执行聚合,并且这样写(使用Python的MongoEngine)
author_lookup = {
'$lookup': {
'from': 'users',
'localField': 'author_id',
'foreignField': '_id',
'as': 'author'
}
}
cursor = post_collection.Post.objects.all().aggregate(author_lookup)
Run Code Online (Sandbox Code Playgroud)
冒着重复自己的风险,就像这个原型的当前状态一样,Post要检索的文档不超过10个,可能Author需要查找3个文档.
以下是此查询连续5次点击的定时结果:
1.9418830871582031 seconds
3.0417070388793945 seconds
2.1725950241088867 seconds
1.3020501136779785 seconds
3.728671073913574 seconds
Run Code Online (Sandbox Code Playgroud)
很慢,mm?
现在,如果我删除聚合部分并只是查询:
cursor = post_collection.Post.objects.all()
Run Code Online (Sandbox Code Playgroud)
在其他条件相同的情况下,以下是此新查询连续5次点击的定时结果:
0.26596999168395996 seconds
0.00011920928955078125 seconds
0.00011205673217773438 seconds
0.0001659393310546875 seconds
0.00013589859008789062 seconds
Run Code Online (Sandbox Code Playgroud)
我要注意的第一件事是,当使用聚合时,第一个结果并不比以下结果慢.这使我认为使用当前形式的聚合查询,不执行缓存操作.
- > 使用聚合框架时有没有办法缓存结果$lookup?
第二件事是,除了在不使用聚合时工作中明显的缓存机制,似乎单独的第一个查询(未缓存)的执行速度比使用聚合时快十倍.我发现很难相信在总共10 lookup个Author文档上执行聚合超过4 个Post文档所需的速度是检索10个 …
我有一种情况,我有一种组文档。我想要一个列表字段,其中包含对组中用户的引用 ID。但是,我需要指出哪些用户具有管理员访问权限。我应该有两个列表,一个是普通用户,一个是管理员,还是有一个自定义文档,我嵌入了一个只有参考 ID 和 bool 值的列表?这基本上是多对多的,两个文档都有一个指向其他文档的引用 Id 列表。我只是不确定如何包含这个其他值。
如果有什么不同,我使用 Python/Mongoengine 来访问 MongoDB
我需要帮助使用 mongoengine 从 python 存储和检索 mongodb。我是 mongoengine 的新手,我正在尝试使用以下内容插入文档:
我用于保存的示例代码:
session = Session()
session = session.from_json(sessionjson)
session.save()
Run Code Online (Sandbox Code Playgroud)
它保存得很好,但是可以从保存的文档中检索 _id 吗?上面的保存正在返回 QuerySetManager 对象,但它没有识别名为 _id 的字段。请就此提出建议
我正在努力尝试构建登录方法一段时间。我正在运行 Flask 应用程序并且运行良好。这一切都在我的机器上本地运行。目前,我正在使用pymongo并MongoClient连接到数据库。这一切都运行良好,如果可能的话,我不想改变这一点。
我试图用Flask-Login建立一个users使用类usermixin。这是我非常失败的地方。我尝试了一些不同的事情,我的问题是如何从我的数据库中提取数据。我以前使用 SQL DB 完成了此操作,但对于此项目,我明确想使用 MongoDB。这是我试图遵循的教程,但我很难理解所有内容,因为没有很好地解释每一行在做什么。
这是我与数据库的连接:
client = MongoClient('mongodb://localhost:27017')
这是我目前没有工作的用户类,我需要帮助的地方。
class User(UserMixin):
def __init__(self, username, password_hash):
self.username = username
self.password_hash = password_hash
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def get_id(self):
return self.username
@login_manager.user_loader
def load_user(user_id):
return User.objects(pk=user_id).first()
Run Code Online (Sandbox Code Playgroud)
然后我的最后一部分是我的登录表单:
@app.route('/login', methods=["GET" , "POST"])
def login():
if request.method == "GET":
return render_template("login.html", error=False)
if request.method == "POST":
check_user = request.form["username"]
if check_user:
if check_password_hash(check_user['password'], request.form["password"]):
login_user(check_user)
return redirect(url_for('index')) …Run Code Online (Sandbox Code Playgroud) I'd like to check whether my script connected to mongoDB successfully. I am using Python and mongoengine. How can I do that? It looks like the connect() method is not actually connecting to the database: if I give it wrong credentials it doesn't raise an error until I run a query on mongo.
mongoengine ×10
mongodb ×7
python ×4
connection ×1
django ×1
flask ×1
many-to-many ×1
pymongo ×1