这真的让我感到困惑,我不明白为什么。我有数据库支持的会话(使用 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 = 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)
任何帮助,将不胜感激。
我将 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 中使用聚合,通过本教程:
但这对我没有帮助。
有人可以指导我如何做到这一点吗?谢谢你!
是否可以使用变量作为集合名称的一部分并根据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) 我处理包含数字和文本的大型数据帧。显然我可以将每列/行存储为一个 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) 我目前正在尝试为 MongoEngine 中的嵌入文档编写通用删除方法。我认为可以访问包含嵌入文档的文档对象并根据父文档定义删除函数。
删除函数可能如下所示:
def delete():
{parent_document}.update(pull__myField={self})
我还不太确定这是否真的像我想象的那样有效,但我认为值得一试。我唯一不知道的是如何访问嵌入文档所在的文档。parent_document所以基本上我必须以某种方式从嵌入式文档访问上面代码中引用的文档。
有谁知道如何做到这一点?一般来说,如果有人这么认为,也许这是一个坏主意,请告诉我。
mongoengine ×10
mongodb ×7
python ×4
django ×3
datetime ×1
document ×1
gridfs ×1
pandas ×1
python-3.x ×1