在PostgreSQL 9.3.4上,我有一个名为"person"的JSON类型列,其中存储的数据采用格式{dogs: [{breed: <>, name: <>}, {breed: <>, name: <>}]}
.我想在索引0处检索狗的品种.以下是我运行的两个查询:
不行
db=> select person->'dogs'->>0->'breed' from people where id = 77;
ERROR: operator does not exist: text -> unknown
LINE 1: select person->'dogs'->>0->'bree...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
作品
select (person->'dogs'->>0)::json->'breed' from es_config_app_solutiondraft where id = 77;
?column?
-----------
"westie"
(1 row)
Run Code Online (Sandbox Code Playgroud)
为什么必须进行铸造?是不是效率低下?我做错了什么或者这对于postgres JSON支持是否必要?
我正在使用Django REST Framework来序列化Django模型.我有一个ListCreateAPIView视图列出对象和一个RetrieveUpdateDestroyAPIView视图来检索/更新/删除单个对象.该模型存储用户自己提交的信息.他们提交的信息包含一些私人信息和一些公共信息.我希望所有用户能够列出和检索公共信息,但我只希望所有者列出/检索/更新/删除私人信息.因此,我需要每个字段的权限而不是对象权限.
我找到的最接近的建议是https://groups.google.com/forum/#!topic/django-rest-framework/FUd27n_k3U0,它会根据请求类型更改序列化程序.这对我的情况不起作用,因为我当时没有查询集或对象来确定它是否归用户所有.
当然,我的前端隐藏了私人信息,但聪明的人仍然可以窥探API请求以获取完整的对象.如果需要代码,我可以提供它,但我的请求适用于vanilla Django REST Framework设计.
我正试图在多个地方重用我的HTML视图的一部分.我想重用的部分是HTML表格中的表格单元格.问题是我在ng-repeat中的自定义指令正在做有趣的事情.我在jsFiddle上重现了这个问题.jsFiddle中有两个HTML表.第一个是ng-repeat,表格单元格写在视图中,第二个是来自指令my-element的表格单元格.Chrome开发工具报告呈现的HTML看起来像这样.请注意,自定义元素只出现一次,位于表格之外.
呈现HTML
<div ng-controller="MyCtrl" class="ng-scope">
table1
<table class="table table-hover">
<tbody><!-- ngRepeat: p in people -->
<tr ng-repeat="p in people" class="ng-scope">
<td class="ng-binding">Name: Mike</td>
<td class="ng-binding">Age: 20</td>
</tr>
<tr ng-repeat="p in people" class="ng-scope">
<td class="ng-binding">Name: Peter S</td>
<td class="ng-binding">Age: 22</td>
</tr>
</tbody>
</table>
<br>table2
<my-element class="ng-binding">Name: Age: </my-element>
<table class="table table-hover">
<tbody>
<!-- ngRepeat: p in people -->
<tr ng-repeat="p in people" class="ng-scope">
</tr>
<tr ng-repeat="p in people" class="ng-scope">
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
来源HTML
<div ng-controller="MyCtrl">
table1
<table class="table …
Run Code Online (Sandbox Code Playgroud) html javascript angularjs angularjs-directive angularjs-ng-repeat
我们的应用程序因内存泄漏而受到严重打击.我发现根本原因是AdMob AdView保留了对旧活动的引用.Android AdMob导致内存泄漏的问题很明显?以及评论/答案中的子链接.我注意到这个问题在ICS中并不明显,因为GC最终通过引用活动来清理WebViews.但是,我的HTC EVO 3D运行库存姜饼从不收集活动,并且考虑到由于OOM错误导致的强制关闭报告的数量,这个问题在我们的应用程序中非常普遍.
我想按照TacB0sS提供的解决方案,https: //stackoverflow.com/a/8364820/684893 .他建议创建一个空活动,并为每个AdMob AdView使用相同的活动.泄漏将被包含,因为AdView将只保留一个空活动.他提供了活动本身的代码以及如何引用它,但我不知道如何将它实际集成到我们的应用程序中.据我所知,他的代码从来没有从AdMob SDK调用任何东西.
我们目前在XML布局中使用AdView,因此我们不会动态地对代码中的广告执行任何操作,例如调用loadAd().我们所有的广告布局都依赖于XML中的广告,因为它们是相对于它进行布局的.因此,我的两个问题是,如何实现TacB0sS代码,如果我们必须切换到在代码中创建XML布局,如何保留XML布局关系?
更新3/6:
感谢Adam(TacB0sS)的回复!我在切换到代码中创建广告时没有问题,但在创建广告时我仍然难以使用您的虚拟活动.我的代码目前是:
AdMobActivity adActivity = new AdMobActivity();
adActivity.startAdMobActivity(this);
// Create an ad with the activity reference pointing to dummy activity
AdView adView = new AdView(adActivity.AdMobMemoryLeakWorkAroundActivity, AdSize.IAB_BANNER, "myAdUnitID");
// Create an ad request.
AdRequest adRequest = new AdRequest();
// add the ad to the layout and request it to be filled
RelativeLayout root_main = (RelativeLayout) findViewById(R.id.root_main);
root_main.addView(adView);
adView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
我已将此代码放在我初始活动的onCreate方法中.我在创建AdView的行上关闭了一个力量,"AdView adView = new AdView(...)".Stacktrace片段:
03-06 00:34:28.098 …
Run Code Online (Sandbox Code Playgroud) 我是单元测试的新手,主要是从我找到的例子中学习.问题是我看到了很多不同的模式,很难理解它们之间的差异.以及如何将这些模式组合到各种用例中.下面是一个这样的模式:
var $rootScope, $window, $location;
beforeEach(angular.mock.module('security.service', 'security/loginModal.tpl.html'));
beforeEach(inject(function(_$rootScope_, _$location_) {
$rootScope = _$rootScope_;
$location = _$location_;
}));
var service, queue;
beforeEach(inject(function($injector) {
service = $injector.get('security');
queue = $injector.get('securityRetryQueue');
}));
Run Code Online (Sandbox Code Playgroud)
因此,从这种模式中,我发现Angular核心服务/提供者应该注入下划线模式,其他第三方依赖项或我自己的依赖项应该使用$ injector.get()模式完成.这有效吗?我注意到我可以使用Angular核心服务执行$ injector.get()并且它仍然可以工作,所以也许只是这样做的惯例?另外,'security/loginModal.tpl.html'的重点是beforeEach(angular.mock.module('security.service', 'security/loginModal.tpl.html'));
什么?我知道它是一个添加到模板缓存的HTML模板但是angular.mock.module做了什么呢?
我也看到过这种不太常见的模式,它会在上面的逻辑中抛出一个小扳手:
beforeEach(inject(function($injector, _$location_) {
security = $injector.get('security');
$location = _$location_;
}));
Run Code Online (Sandbox Code Playgroud)
如果我可以像注入$ location这样的注入回调添加服务,这似乎是一种更简单的引用依赖关系的方式.我为什么不这样做?
这是另一种模式:
beforeEach(function() {
module('security.service', function($provide) {
$provide.value('$window', $window = jasmine.createSpyObj('$window', ['addEventListener', 'postMessage', 'open']));
});
inject(function(security) {
service = security;
});
});
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这种模式的重点是使用模拟的$ window初始化"security.service"模块.这是有道理的,但我如何使用以前的模式适应这种模式?即如何模拟'security/loginModal.tpl.html',如何注入我的Angular核心依赖项+我的其他依赖项?
最后,我可以和不能在嵌套的描述和注入块中注入什么?假设我无法将模拟服务复制到我正在测试的模块中,这是否安全?那么我可以注入什么以及用例是什么?
如果有一个确定的AngularJS单元测试初始化文档源可以帮助回答这些问题,请指出.
我正在将Django与Django Rest Framework和uWSGI一起使用。我已经在pylibmc后端的服务器上设置了memcached。我为每个站点缓存配置了Django,因此应该缓存每个视图,但我使用@never_cache装饰器将其除外。我不知道为什么即使添加了Django的@never_cache装饰器,Django仍然尝试缓存我的API视图。我有一个API,支持草稿模型的读写操作。当我使用UpdateAPIView进行草稿更新,然后刷新页面时,它仍显示更新前的草稿数据。我已经确认这不是浏览器端缓存,因为网络日志显示的响应为200,而不是304,并且如果我清除内存缓存并刷新页面,则可以正确返回更新的草稿。
这是最近发生的,当我将Django从1.8升级到1.10,约15个pip软件包依赖项,OS发行版及其软件包时(因此很难确切查明是什么原因造成的)。
DRF检索API视图
from django.views.decorators.cache import never_cache
class DraftDetail(generics.RetrieveAPIView):
queryset = Draft.objects.all()
serializer_class = DraftSerializer
permission_classes = (permissions.IsAuthenticated, HasReadWriteAccess)
@never_cache
def dispatch(self, *args, **kwargs):
return super(DraftDetail, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我也尝试过基于@method_decorator的替代类,但没有任何变化:
from django.views.decorators.cache import never_cache
from django.utils.decorators import method_decorator
@method_decorator(never_cache, name='dispatch')
class DraftDetail(generics.RetrieveAPIView):
queryset = Draft.objects.all()
serializer_class = DraftSerializer
permission_classes = (permissions.IsAuthenticated, HasReadWriteAccess)
Run Code Online (Sandbox Code Playgroud)
settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
}
}
PYLIBMC_MIN_COMPRESS_LEN = 250
# The cache alias to use for storage.
CACHE_MIDDLEWARE_ALIAS = 'default'
# …
Run Code Online (Sandbox Code Playgroud) enable-cors.org nginx 配置建议使用以下值Access-Control-Allow-Headers
和Access-Control-Expose-Headers
。但除了 之外,没有太多解释为什么推荐这些Custom headers and headers various browsers *should* be OK with but aren't
。如果我的应用程序不需要其中一些 API 请求,我宁愿不增加每个 API 请求的有效负载。
我知道我可以删除它们并等待某些东西损坏,但我希望了解一些关于为什么/如何选择它们的背景,以便我可以就它们是否对我的应用程序是必要的做出更明智的决定。即他们是否建议支持我的应用程序不需要支持的浏览器?
访问控制允许标头:DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
访问控制公开标头:DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
对于Allow-Headers
大多数人来说,我可以理解为什么客户想要发送它们。 X-CustomHeader
但作为一个奇怪的人脱颖而出。另外,我在 Chrome 上测试过,即使User-Agent
明确允许,chrome 仍然会发送它。这意味着添加这些选项是为了实现我的应用程序可能不需要的浏览器兼容性。
对于 来说Expose-Headers
,客户端需要读取哪些标头似乎是非常特定于应用程序的。为什么客户需要阅读 User-Agent
、、DNT
或X-Requested-With
?它们包含供服务器而不是客户端使用的信息。此外,Cache-Control
和Content-Range
已经默认启用,因此它们在这里看起来是多余的。
我正在尝试使用postMessage和addEventListener对情况进行单元测试.用例是我使用单独的窗口进行用户登录,类似于OAuth工作流,然后在登录窗口中使用postMessage通知主窗口用户已登录.这是将在主窗口中的监听代码:
$window.addEventListener("message", function(event) {
if (event.data.type === "authLogin") {
service.curUser = event.data.user;
utilities.safeApply($rootScope);
$window.postMessage({type: "authLoginSuccess"}, '*');
}
});
Run Code Online (Sandbox Code Playgroud)
utilities.safeApply函数定义为:
// Run $apply() if not already in digest phase.
utilitiesService.safeApply = function(scope, fn) {
return (scope.$$phase || scope.$root.$$phase) ? scope.$eval(fn) : scope.$apply(fn);
};
Run Code Online (Sandbox Code Playgroud)
我的单元测试旨在发送postMessage来模拟登录:
describe('auth login postMessage', function() {
var testUser = {handle: 'test'};
beforeEach(function(done) {
$window.postMessage({type: 'authLogin', user: testUser}, '*');
function onAuthLoginSuccess(event) {
$window.removeEventListener('message', onAuthLoginSuccess);
done();
}
$window.addEventListener("message", onAuthLoginSuccess);
});
it("should set the user object", function() {
expect(service.curUser).toEqual(testUser);
});
}); …
Run Code Online (Sandbox Code Playgroud) 我有一个 node + express 应用程序,我在其中使用 TypeScript。我有几个 API 路由,我在每个路由中声明了一个函数,如下所示:
function cleanReqBody(req) {
req.body.createdBy = req.user;
req.body.modifiedBy = req.user;
req.body.modified = new Date();
}
Run Code Online (Sandbox Code Playgroud)
对我的代码运行 tsc 时,我得到TS2393: Duplicate function implementation
. 我真的不明白为什么。我可以理解这是否是客户端代码,它会认为两个函数都在同一范围内(窗口),但为什么这适用于节点模块?不是我的每个节点路由都使用不共享范围的单独节点模块吗?
angularjs ×3
django ×2
jasmine ×2
javascript ×2
unit-testing ×2
admob ×1
android ×1
caching ×1
cors ×1
express ×1
html ×1
http-headers ×1
json ×1
memcached ×1
memory-leaks ×1
nginx ×1
node.js ×1
postgresql ×1
psql ×1
typescript ×1