我试图在Flask应用程序中的Python中启动一个新线程.我正在做由请求触发的后台工作,但我不需要等待完成工作来响应请求.
是否可以在此次威胁中将烧瓶请求设置为进入的请求?原因是,我们对DB的查询(mongoDB前面的mongoengine)的ACL依赖于请求的用户(它从flask的请求对象中获取)以查看他们是否有权访问这些对象,并且因为请求是在子线程中不可用.
任何想法将不胜感激.
这是我现在如何处理它的伪代码,但它不起作用.
@app.route('/my_endpoint', methods=['POST'])
def my_endpoint_handler():
#do tracking in sub-thread so we don't hold up the page
def handle_sub_view(req):
from flask import request
request = req
# Do Expensive work
thread.start_new_thread(handle_sub_view, (request))
return "Thanks"
Run Code Online (Sandbox Code Playgroud) 如何在MongoEngine中对查询对象进行排序,就像在常规mongodb查询中一样?
http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
我正在尝试creation_time向我的文档添加属性.以下是一个例子:
import datetime
class MyModel(mongoengine.Document):
creation_date = mongo.DateTimeField()
modified_date = mongo.DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
Django模型为它们的DateTimeField对象构建了参数,例如add_now,等等,但是MongoEngine不支持这个.
我想知道这样做的最佳方法如下:
m,created = MyModel.objects.get_or_create()
if created:
m.creation_date = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)
或者如果有更好,更好的方式.
我正在尝试使用django和mongoengine来提供只有GridFS的存储后端.我还有一个MySQL数据库.
当我从django管理员中删除时,我遇到了一个奇怪的(对我而言)错误,我想知道我是否做错了什么.
我的代码看起来像这样:
# settings.py
from mongoengine import connect
connect("mongo_storage")
# models.py
from mongoengine.django.storage import GridFSStorage
class MyFile(models.Model):
name = models.CharField(max_length=50)
content = models.FileField(upload_to="appsfiles", storage=GridFSStorage())
creation_time = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
我能够很好地上传文件,但是当我删除它们时,似乎有些东西会破坏,mongo数据库似乎处于不可行状态,直到我手动删除所有FileDocument.objects.发生这种情况时,我无法上传文件或从django界面删除它们.
从堆栈跟踪我有:
/home/projects/vector/src/mongoengine/django/storage.py in _get_doc_with_name
doc = [d for d in docs if getattr(d, self.field).name == name] ...
? Local vars
Variable Value
_[1]
[]
d
docs
Error in formatting: cannot set options after executing query
name
u'testfile.pdf'
self
/home/projects/vector/src/mongoengine/fields.py in __getattr__
raise AttributeError
Run Code Online (Sandbox Code Playgroud)
我是否错误地使用此功能?
感谢@ zeekay的回答,我能够得到一个工作的gridfs存储插件.我最终根本没有使用mongoengine.我把我的改编解决方案放在github上 …
我正在使用瓶子框架和mongoengine.我有订单型号:
class OrderDetail(Option):
orderDetailsQty = FloatField()
def to_dict(self):
return mongo_to_dict_helper(self)
class Order(Document):
userName = StringField(required=True)
orderDate = DateTimeField()
orderStatus = ListField(EmbeddedDocumentField(Status))
orderDetails = ListField(EmbeddedDocumentField(OrderDetail))
orderComments = ListField(EmbeddedDocumentField(Comment))
isActive = BooleanField()
def to_dict(self):
orderObj = mongo_to_dict_helper(self)
orderDetailList = []
for orderDetail in orderObj["orderDetails"]:
orderDetailList.append(orderDetail.__dict__)
orderObj["OrderDetails"] = orderDetailList
return (self)
Run Code Online (Sandbox Code Playgroud)
当查询mongodb时,我得到一个对象,然后使用以下函数将其转换为dict:
def mongo_to_dict_helper(obj):
return_data = []
for field_name in obj._fields:
if field_name in ("id",):
continue
data = obj._data[field_name]
if isinstance(obj._fields[field_name], StringField):
return_data.append((field_name, str(data)))
elif isinstance(obj._fields[field_name], FloatField):
return_data.append((field_name, float(data)))
elif isinstance(obj._fields[field_name], IntField):
return_data.append((field_name, …Run Code Online (Sandbox Code Playgroud) 我正在尝试查询我的数据库.某些记录当前有额外的字段未包含在我的模型模式中(错误,但我想处理这些情况).当我尝试查询数据库并将记录转换为模式时,我收到以下错误:
FieldDoesNotExist
The field 'X' does not exist on the document 'Y'
Run Code Online (Sandbox Code Playgroud)
由于数据库中的额外字段与架构不同.
有没有办法忽略mongoengine中额外字段的模式验证?
对于我的一个项目,我更喜欢使用Django + Mongo.
我为什么要使用MongoEngine,而不仅仅是PyMongo?有什么好处?使用PyMongo查询会产生已经完成对象的结果,不是吗?那么MongoEngine的目的是什么?
我想将MongoEngine用于我的下一个项目.现在我想知道我是否也可以在同一个项目中直接使用PyMongo.只是因为我需要一些非常特殊的东西,不能直接通过mongoengine支持.
有没有怀疑这会起作用,或者我不应该这样做!?
我正在构建一个使用MongoDB和MongoEngine来存储数据的Django应用程序.为了呈现我的问题的简化版本,我想要有两个类:User和Page.每个页面应该与用户和每个用户关联页面.
from mongoengine import *
class Page(Document):
pass
class User(Document):
name = StringField()
page = ReferenceField(Page)
class Page(Document):
content = StringField()
user = ReferenceField(User)
Run Code Online (Sandbox Code Playgroud)
(请注意,必须在User之前定义Page.如果我缺少处理循环依赖关系的Pythonic方法,请告诉我.)每个文档都可以创建并保存得很好,但是为用户分配页面会引发错误.
u = User(name='Jeff')
u.save()
p = Page(content="I'm a page!")
p.save()
p.user = u
p.save()
u.page = p
u.save()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build\bdist.win32\egg\mongoengine\document.py", line 71, in save
File "build\bdist.win32\egg\mongoengine\base.py", line 303, in validate
mongoengine.base.ValidationError: Invalid value for field of type "ReferenceField"
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么抛出这个异常,我做错了什么,以及如何避免它?
python circular-reference mongodb bidirectional-relation mongoengine
我正在使用Django中的mongoengine,
这是我的文档定义:
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
Run Code Online (Sandbox Code Playgroud)
我想这样做:
给定一个user_id和point:
如果没有文件,有这个user_id,创建一个具有user_id和point并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?
mongoengine ×10
mongodb ×9
python ×6
django ×4
pymongo ×2
bottle ×1
flask ×1
gridfs ×1
orm ×1
python-2.7 ×1