标签: 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
查看次数

Mongoengine 是否公开 $min、$max 字段运算符?

我正在使用 mongoengine,并且希望能够使用$min$max字段运算符(以执行条件更新),但我无法看到如何通过 mongoengine 界面执行此操作。

任何帮助是极大的赞赏。

python mongodb mongoengine

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

错误未注册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 Document 中的所有字段并检查每个字段是否为特定类型且 is_required 的方法

这是使用 mongoengine 的文档中的一些字段

_id     = f.ObjectIdField(db_field="i", required=True)
name    = f.StringField(db_field="n")
Run Code Online (Sandbox Code Playgroud)

我想循环遍历文档中的每个字段,看看它们是否为 XField 类型并且 is_required 为 True,有没有办法做到这一点?

我知道你可以使用列出所有字段_fields

for field in SomeDocument._fields:
    print type(field) # always return 'str' not 'StringField' or 'ObjectField'

    # Don't know how to check is_required
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

python mongodb mongoengine

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

按 mongo 中日期时间字段中的日期排序

我将 django 与 mongo 一起使用,我有这种类型的模型:

class ProductDate(EmbeddedDocument):
    created = DateTimeField()
    updated = DateTimeField(null=True)

class Product(Document):
    product_id = IntField()
    saves = IntField(default=0)

    title = StringField(max_length=1000)
    gender = StringField(choices=settings.GENDER_CHOICES, default=settings.UNISEX, max_length=50)
    date = EmbeddedDocumentField(ProductDate)
Run Code Online (Sandbox Code Playgroud)

现在,当我进行这样的查询时:

queryset = queryset.filter(title=search)
Run Code Online (Sandbox Code Playgroud)

我想首先按创建的日期时间字段中的日期排序,然后按保存排序。这样,具有相同日期而不是时间的产品将按保存次数排序。但是,我似乎找不到将硅藻土转换为日期的方法,以便它仅比较日期。

我不能这样做:

.order_by("-date__created","-saves")
Run Code Online (Sandbox Code Playgroud)

因为这是根据时间排序的。

我尝试在 mongo 中使用聚合,通过本教程:

http://www.codewrecks.com/blog/index.php/2014/10/13/aggregate-in-mongo-using-only-date-part-of-a-datetime-property/

但这对我没有帮助。

有人可以指导我如何做到这一点吗?谢谢你!

django datetime mongodb mongoengine django-rest-framework

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

在mongoengine和Django中通过不同变量查询不同集合

是否可以使用变量作为集合名称的一部分并根据mongoengine中的名称查询不同的集合?

例如:

我的mongoDB中有3个集合

  • 收藏优先
  • 集合_秒
  • 集合_第三

并执行一个简单的 for 循环,例如:

collection_names = ['first', 'second', 'third']
for name in collection_names:
    ## Query the collection_+`name` here
Run Code Online (Sandbox Code Playgroud)

顺便问一下,我在Django中使用mongoengin,这种场景的model.py如何设置?

class Testing(DynamicDocument):
    # The collection_name should be dynamic, isn't it?
    meta = {'collection' : 'collection_name'}         
    user_name = StringField(db_field='user_name')
Run Code Online (Sandbox Code Playgroud)

非常感谢。


更新解决方案。

在 models.py 中定义不带元数据的模型:

class Testing(DynamicDocument):
    ## Do NOT use the meta to point to a specific collection.
    user_name = StringField(db_field='user_name')
Run Code Online (Sandbox Code Playgroud)

调用该函数时,使用switch_collection切换到真正的集合:

def search_in_testing(self, name, **kwargs):
    with switch_collection(Testing, 'colection_%s' % (name)):
        search_results = Testing.objects(**kwargs)
    return …
Run Code Online (Sandbox Code Playgroud)

python django mongodb mongoengine

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

通过 GridFS 将大型 DataFrame 写入 MongoDB

我处理包含数字和文本的大型数据帧。显然我可以将每列/行存储为一个 sep。我的 mongoDB 中的文档,但我想在加载数据时删除和麻烦。

我考虑过使用 GridFS,它是通过使用 MongoEngine FileField 进行抽象的。与此同时,我想出了一个适合我的解决方案:

import pandas as pd
from mongoengine import Document, StringField, FileField

from io import BytesIO


class Frame(Document):
    name = StringField(required=True, max_length=200, unique=True)
    data = FileField()

    @property
    def frame(self):
        str_data = BytesIO(self.data.read()).read().decode()

        try:
            return pd.read_json(str_data, typ="frame")
        except ValueError:
            return pd.read_json(str_data, typ="series")

    def __str__(self):
        return "{name}: \n{frame}".format(name=self.name, frame=self.frame)

    def put(self, frame):
        if self.data:
            self.data.replace(frame.to_json().encode())
        else:
            self.data.new_file()
            self.data.write(frame.to_json().encode())
            self.data.close()

        self.save()


if __name__ == '__main__':
    from pydata.config import connect_production

    connect_production()
    frame = pd.DataFrame(data=[[1,2,4],[3,4,6]], columns=["A","B","C"], index=["X","Y"])

    f …
Run Code Online (Sandbox Code Playgroud)

mongodb gridfs mongoengine python-3.x pandas

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

MongoEngine:从嵌入文档获取父文档

我目前正在尝试为 MongoEngine 中的嵌入文档编写通用删除方法。我认为可以访问包含嵌入文档的文档对象并根据父文档定义删除函数。

删除函数可能如下所示: def delete(): {parent_document}.update(pull__myField={self})

我还不太确定这是否真的像我想象的那样有效,但我认为值得一试。我唯一不知道的是如何访问嵌入文档所在的文档。parent_document所以基本上我必须以某种方式从嵌入式文档访问上面代码中引用的文档。

有谁知道如何做到这一点?一般来说,如果有人这么认为,也许这是一个坏主意,请告诉我。

document mongoengine embedded-documents

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