我有一个用户共享模型,如下所示:
class Share( models.Model ):
sharer = models.ForeignKey(User, verbose_name=_("Sharer"), related_name='sharer')
receiver = models.ForeignKey(User, verbose_name=_("Receiver"), related_name='receiver')
class Meta:
unique_together = ( ("sharer", "receiver"), ("receiver", "sharer") )
Run Code Online (Sandbox Code Playgroud)
我想为sharer(S)和receiver(R)保存单个对象(顺序与RS或SR无关).但以上unique_together将无法满足此要求; 假设RS在数据库中,然后如果我保存SR,我将不会得到验证.为此,我为Share模型编写了自定义唯一验证.
def validate_unique(
self, *args, **kwargs):
super(Share, self).validate_unique(*args, **kwargs)
if self.__class__.objects.filter( Q(sharer=self.receiver, receiver=self.sharer) ).exists():
raise ValidationError(
{
NON_FIELD_ERRORS:
('Share with same sharer and receiver already exists.',)
}
)
def save(self, *args, **kwargs):
# custom unique validate
self.validate_unique()
super(Share, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
此方法在正常使用中正常工作.
问题: 我有一个匹配的算法,它获取共享和接收者的请求并保存共享对象(SR或RS),然后几乎同时发送响应(共享对象).因为我检查与查询重复(没有数据库级别)需要时间,所以最后我有2个对象SR和RS.
我想要一些解决方案,对于共享者S和接收者RI只能保存单个共享对象,SR或RS否则会得到一些验证错误(如数据库的IntegrityError).
Django = 1.4,Database = Postgresql
我正在开发一个带有两个顶级模块和每个模块下的几个模块的Web应用程序.例:
上市
门户
每个嵌套模块都有一个或多个潜在的路由,服务和组件.公共和门户模块也有不同的布局要求.
我想要做的是将我的代码分解为上面每个主要部分的模块.但是,当我尝试将模块作为另一个路由的子项加载时,我收到一条错误消息,指出无法找到该模块:
error_handler.js:46
EXCEPTION: Uncaught (in promise): Error: Cannot find module './dashboard/dashboard.module'.
Run Code Online (Sandbox Code Playgroud)
这是我的路由文件:
/app/app.routing.ts
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
export const appRouting: ModuleWithProviders = RouterModule.forRoot([
{
path: 'portal',
loadChildren: 'portal/portal.module#PortalModule'
},
{
path: '',
loadChildren: 'public/public.module#PublicModule'
}
]);
/app/portal/portal.routing.ts
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { PortalComponent } from './portal.component';
export const portalRouting: ModuleWithProviders = RouterModule.forChild([ …Run Code Online (Sandbox Code Playgroud) 我会在 NestJS 中调用拦截器内的服务(请参阅文档),这就是我的制作方法
export class HttpInterceptor implements NestInterceptor {
constructor(private configService:ConfigService){}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
let request = context.switchToHttp().getRequest();
const apikey= this.configService.get('apikey');
const hash=this.configService.get('hash');
request.params= {apikey:apikey ,hash:hash,ts:Date.now()}
return next
}
}
Run Code Online (Sandbox Code Playgroud)
她的 ConfigService
export class ConfigService {
private readonly envConfig: { [key: string]: string };
constructor(filePath: string) {
this.envConfig = dotenv.parse(fs.readFileSync(path.join(__dirname, filePath)));
}
get(key: string): string {
return this.envConfig[key];
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出 configService 未定义
无法读取未定义的属性“get”
但我已经ConfigService正确实例化了
我不知道为什么我不能ConfigService在拦截器内部使用
我在这里有一个概念性问题 - 我正在寻找使用Docker(我还没有成功)在Elastic Beanstalk(我之前已成功完成)上部署Django应用程序.我知道使用Docker预先构建的Elastic Beanstalk图像使用了Ngnix,我之前已经部署了Django,但是我在Elastic Beanstalk上完成此操作时有点迷失.我已经使用了亚马逊的文档,并使用他们的代码成功地将一个Dockerfile部署到弹性beanstalk,但还没有让我自己进行.有没有人成功过这个?有人能指出我正确的方向,找出如何完成这项具体任务?谢谢
我正在学习芹菜教程。他们正在使用 Python2,而我正在尝试使用 python3 实现相同的功能。
我有2个文件:
celery_proj.py :
from celery import Celery
app = Celery(
'proj', broker='amqp://', backend='amqp://', include=['proj.tasks'])
app.conf.update(Celery_TAST_RESULT_EXPIRES=3600,)
if __name__ == '__main__':
app.start()
Run Code Online (Sandbox Code Playgroud)
和任务.py:
from celery_proj import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
Run Code Online (Sandbox Code Playgroud)
当我尝试跑步时,celery -A proj worker -l info我得到:
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/celery/app/utils.py", line 235, in find_app
found = sym.app
AttributeError: 'module' object has no attribute …Run Code Online (Sandbox Code Playgroud) 我想为我的Aurelia应用程序设置基本标题值,然后根据活动的路由为其附加一个值.
我的路由器配置是:
export class App {
configureRouter(config, router) {
config.title = 'Brandon Taylor | Web Developer | Graphic Designer';
config.map([
. . .
{ route: 'work', name: 'work', moduleId: 'work', nav: true, title: ' | work' },
. . .
]);
this.router = router;
}
}
Run Code Online (Sandbox Code Playgroud)
奥里利亚希望将追加title导航参数来开始的config.title,但我想它的结束.
我试过在视图模型中做一个覆盖:
export class Work {
activate(params, routeConfig, navigationInstruction) {
routeConfig.navModel.router.title += ' | work';
};
}
Run Code Online (Sandbox Code Playgroud)
但结果是:
Brandon Taylor | Web Developer | Graphic Designer …Run Code Online (Sandbox Code Playgroud) 我的路线守卫需要等待状态被填充,但我只得到第一个值,当然, null
export class Guard implements CanActivate {
constructor(
private router: Router,
private store: Store<AppState>,
) {}
canActivate(): Observable<boolean> {
return this.store.select<MyState>('mystate').map(state => {
if (state && state.thing) {
this.router.navigate(['/path']);
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能强迫守卫等待状态被填充?
如果我采用这种.skipWhile()模式:
return this.store
.select<MyState>('mystate')
.skipWhile(mystate => {
if (mystate && mystate.thing) {
return false;
}
console.log('here');
return true; // <- shouldn't this cause it to keep going?
})
.do(mystate => {
if (mystate.thing.condition) {
this.router.navigate(['/path']);
}
})
.mapTo(true);
Run Code Online (Sandbox Code Playgroud)
.do(...)永远不会被评估,并且 …
我刚刚开始使用Nestjs,我想知道如何使用路由前缀或通过Express Router实例来对我的API进行版本控制?
理想情况下,我想通过以下方式访问端点:
/v1
/v2
Run Code Online (Sandbox Code Playgroud)
等等,所以我可以优雅地降低端点.我没有看到我可以添加版本前缀的位置.我知道可以在应用程序实例上设置全局前缀,但这不适用于特定的端点集.
我正在我的 Angular (5) 应用程序中实现一个懒惰的图像加载器,并且很好奇如何避免setTimeout()在ngAfterViewInit()可能的情况下调用我的.
代码的相关部分是:
# component
ngOnInit(): void {
this.workService.getCategories().then(workCategories => {
this.workCategories = workCategories;
});
}
ngAfterViewInit(): void {
setTimeout(() => {
const images = Array.from(document.querySelectorAll('.lazy-image'));
}, 100);
}
# component template
<div *ngFor="let workCategory of workCategories">
<h3>{{ workCategory.fields.name }}</h3>
<div *ngFor="let workSample of workCategory.fields.workSamples">
<img width="294" height="294" class="lazy-image" src="..." data-src="..." />
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我删除setTimeout()图像数组始终为空。AfterViewInit应该在所有子组件创建后运行。我也尝试过 AfterContentInit,它的行为与 AfterContentChecked 相同,后者导致 Chrome 崩溃。
在这种情况下是否可以避免 setTimeout ?
JSON我在服务器上有一个文件。我想将它加载到我的angular-typescript. 我尝试了以下方法。
ngOnInit () {
this.httpService
.get("http://x.x.x.x/config_files/test/config.json")
.subscribe(data => console.log(data));
}
Run Code Online (Sandbox Code Playgroud)
当我刷新页面时出现以下错误
从源“ http://localhost:4200 ”访问位于“http ://xxxx/config_files/test/config.json ”的 XMLHttpRequest已被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头关于所请求的资源。
由于没有服务器端 API,因此Access-Control-Allow-Origin无法添加标头。如何解决这个问题?
angular ×4
javascript ×3
django ×2
nestjs ×2
aurelia ×1
celery ×1
database ×1
docker ×1
ngrx ×1
postgresql ×1
python ×1
python-3.x ×1
rxjs ×1
typescript ×1
validation ×1
webpack ×1