小编Bra*_*don的帖子

Django定制独特的约束

我有一个用户共享模型,如下所示:

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

database django postgresql validation unique-constraint

6
推荐指数
1
解决办法
1051
查看次数

Angular2找不到嵌套模块

我正在开发一个带有两个顶级模块和每个模块下的几个模块的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)

javascript webpack angular

6
推荐指数
1
解决办法
770
查看次数

在Nestjs中实例化拦截器内的服务类

我会在 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在拦截器内部使用

typescript nestjs

6
推荐指数
1
解决办法
8806
查看次数

在Amazon Elastic Beanstalk上使用Docker部署Django

我在这里有一个概念性问题 - 我正在寻找使用Docker(我还没有成功)在Elastic Beanstalk(我之前已成功完成)上部署Django应用程序.我知道使用Docker预先构建的Elastic Beanstalk图像使用了Ngnix,我之前已经部署了Django,但是我在Elastic Beanstalk上完成此操作时有点迷失.我已经使用了亚马逊的文档,并使用他们的代码成功地将一个Dockerfile部署到弹性beanstalk,但还没有让我自己进行.有没有人成功过这个?有人能指出我正确的方向,找出如何完成这项具体任务?谢谢

django amazon-web-services docker amazon-elastic-beanstalk

5
推荐指数
1
解决办法
2996
查看次数

使用 Python 3 时,Celery 'module' 对象没有属性 'app'

我正在学习芹菜教程。他们正在使用 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)

python celery python-3.x

5
推荐指数
2
解决办法
9959
查看次数

将值附加到Aurelia路由器config.title

我想为我的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)

javascript aurelia

5
推荐指数
2
解决办法
1092
查看次数

等待 ngrx 状态在异步路由保护中填充

我的路线守卫需要等待状态被填充,但我只得到第一个值,当然, 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)

我怎样才能强迫守卫等待状态被填充?


[更新1]

如果我采用这种.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(...)永远不会被评估,并且 …

rxjs ngrx angular

5
推荐指数
1
解决办法
2882
查看次数

版本化Nestjs路线?

我刚刚开始使用Nestjs,我想知道如何使用路由前缀或通过Express Router实例来对我的API进行版本控制?

理想情况下,我想通过以下方式访问端点:

/v1
/v2
Run Code Online (Sandbox Code Playgroud)

等等,所以我可以优雅地降低端点.我没有看到我可以添加版本前缀的位置.我知道可以在应用程序实例上设置全局前缀,但这不适用于特定的端点集.

nestjs

5
推荐指数
2
解决办法
2721
查看次数

在 ngAfterViewInit 中检索由 ngFor 创建的元素

我正在我的 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 ?

javascript angular

5
推荐指数
1
解决办法
1872
查看次数

使用 URL 加载外部 JSON 文件

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

5
推荐指数
1
解决办法
1373
查看次数