我最近跑进需要禁用我的观点一个交易请求,为了能够调用db.connection.close()和connect()过程中,以提高性能的努力中的请求.
我有一个DRF ViewSet,并使用以下非常简单的视图来验证non_atomic_requests decoractor似乎没有效果.ATOMIC_REQUESTS=True已启用settings.py,和DEBUG=False.
from django.db import transaction
@transaction.non_atomic_requests
def create(self, *args, **kwargs):
m = MyModel(stuff="hello")
m.save()
raise Exception('exception! row should still be saved though')
return Response()
Run Code Online (Sandbox Code Playgroud)
在调用视图之后,我打开Django shell,并验证db中的行数没有增长,即使它应该有.在请求期间打开调试器以在行之后停止执行m.save(),我可以在Django shell中观察到新行还不可见.
如果我ATOMIC_REQUESTS=False进入settings.py,代码将按预期工作,并且db中的行数增加1,即使在从视图返回之前引发错误也是如此.
什么时候ATOMIC_REQUESTS=False,使用@transaction.atomic装饰器确实按预期工作.因此,作为一种解决方法,我可以使用它将每个其他视图设置为原子而不是......
我目前认为这是框架中的一个错误.任何人都可以验证我的发现,或者指出我是否误解了这个装饰器的功能是什么?
我使用的是Python 3.6,Django 2.0和DRF 3.7.7.
我正在学习Angular,我试图以这种方式包含Restangular:
var app = angular.module('myapp',['restangular']);
app.controller('UsersController', ['$scope', function ($scope, Restangular) {
...
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用Restangular:
var data = Restangular.all('someurl');
Run Code Online (Sandbox Code Playgroud)
这里我得到一个错误:Restangular未定义.根据文档,这应该很简单:
// Add Restangular as a dependency to your app
angular.module('your-app', ['restangular']);
// Inject Restangular into your controller
angular.module('your-app').controller('MainCtrl', function($scope, Restangular) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
但是我无法让它工作.是什么赋予了?
我在 Ubuntu 12.04 上使用 Qt Creator 制作了一个非常简单的应用程序。该应用程序读取一个 xml 文件并显示几个图像。但是,当我尝试通过双击另一台机器(运行 Lubuntu)上的图标来启动应用程序时,不会显示图像,也不会读取 xml 文件。通过键入 ./App 从命令行启动该应用程序时,它确实可以正常工作。
为什么它的行为是这样的,我该如何解决?
编辑:读取xml的方法:
QDomDocument doc("document");
QString path = "datastorage.xml"; // xml is in same directory as the executable
QFile xmlFile(path);
if (!xmlFile.open(QIODevice::ReadOnly))
throw QString("Error with XML: Could not open file " + path);
if (!doc.setContent(&xmlFile)) {
xmlFile.close();
throw QString("Error with XML: Could not set QDomDocument content from " + path);
}
xmlFile.close();
QDomElement root = doc.documentElement();
return root;
Run Code Online (Sandbox Code Playgroud)