标签: mongoengine

页面刷新时Django用户注销

这真的让我感到困惑,我不明白为什么。我有数据库支持的会话(使用 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 域是否可以作为问题所在的线索?

django session-state session-cookies mongoengine

5
推荐指数
0
解决办法
731
查看次数

Mongoengine 链接到现有集合

我正在使用 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)

mongoengine flask-mongoengine

5
推荐指数
1
解决办法
4125
查看次数

mongoengine.fields.ImproperlyConfigured:未找到 PIL 库

当我尝试导入具有 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)

有什么问题?

python mongodb mongoengine

5
推荐指数
1
解决办法
2088
查看次数

错误未注册flask-mongoengine教程

我开始了这个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)

任何的想法。太感谢了。

mongodb mongoengine flask-mongoengine

5
推荐指数
1
解决办法
2589
查看次数

MongoEngine 删除文档

我有以下 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文档,但仍然无法仅删除一个特定的文档

python mongodb mongoengine

5
推荐指数
2
解决办法
4708
查看次数

很少和非常小的文档上的MongoDB查找聚合速度很慢

关于其中一个或两个案例的慢速MongoDB聚合,有很多问题:

  • 要检索的大量文档
  • 非常大的文件

令我困扰的是,在我正在设置的原型中,我的查询始终非常缓慢,其中:

  • 要检索的文档不超过10个
  • 每个文档不超过300字节的信息

使用查找聚合

此查询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 lookupAuthor文档上执行聚合超过4 个Post文档所需的速度是检索10个 …

mongodb mongoengine mongodb-query aggregation-framework

5
推荐指数
0
解决办法
2337
查看次数

MongoDB:参考另一个附有附加信息的文档

我有一种情况,我有一种组文档。我想要一个列表字段,其中包含对组中用户的引用 ID。但是,我需要指出哪些用户具有管理员访问权限。我应该有两个列表,一个是普通用户,一个是管理员,还是有一个自定义文档,我嵌入了一个只有参考 ID 和 bool 值的列表?这基本上是多对多的,两个文档都有一个指向其他文档的引用 Id 列表。我只是不确定如何包含这个其他值。

如果有什么不同,我使用 Python/Mongoengine 来访问 MongoDB

many-to-many mongodb mongoengine flask-mongoengine

5
推荐指数
1
解决办法
330
查看次数

Python mongoengine - 保存后检索_id

我需要帮助使用 mongoengine 从 python 存储和检索 mongodb。我是 mongoengine 的新手,我正在尝试使用以下内容插入文档:

我用于保存的示例代码:

session = Session()
session =  session.from_json(sessionjson)
session.save()
Run Code Online (Sandbox Code Playgroud)

它保存得很好,但是可以从保存的文档中检索 _id 吗?上面的保存正在返回 QuerySetManager 对象,但它没有识别名为 _id 的字段。请就此提出建议

python mongodb mongoengine

5
推荐指数
1
解决办法
1939
查看次数

带有 MongoDB 的 Flask-login usermixin 类

我正在努力尝试构建登录方法一段时间。我正在运行 Flask 应用程序并且运行良好。这一切都在我的机器上本地运行。目前,我正在使用pymongoMongoClient连接到数据库。这一切都运行良好,如果可能的话,我不想改变这一点。

我试图用Flask-Login建立一个users使用类usermixin。这是我非常失败的地方。我尝试了一些不同的事情,我的问题是如何从我的数据库中提取数据。我以前使用 SQL DB 完成了此操作,但对于此项目,我明确想使用 MongoDB。这是我试图遵循的教程,但我很难理解所有内容,因为没有很好地解释每一行在做什么。

https://medium.com/@dmitryrastorguev/basic-user-authentication-login-for-flask-using-mongoengine-and-wtforms-922e64ef87fe

这是我与数据库的连接: 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)

mongodb pymongo mongoengine flask

5
推荐指数
2
解决办法
9510
查看次数

Mongoengine 检查连接是否成功

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.

python connection mongoengine

5
推荐指数
0
解决办法
812
查看次数