在以下示例toPromise中不起作用:
https://jsfiddle.net/tossp/nmf9jg32/
我的代码:
function getPostData() {
return fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => res.json())
}
var source = Rx.Observable.fromEvent(document.body, 'click');
var example = source.concatMap(
e => Rx.Observable.from(getPostData()),
(e, res, eIndex, resIndex) => res.title);
example.subscribe({
next: (value) => { console.log('subscribe!!!',value); },
error: (err) => { console.log('Error: ' + err); },
complete: () => { console.log('complete'); }
});
example.do((value)=>console.log('do!!!',value)).toPromise().then((value)=>console.log('toPromise!!!',value));
Run Code Online (Sandbox Code Playgroud) Django ORM是否提供了有条件地创建对象的方法?
例如,假设您希望使用某种乐观并发控制来插入新对象.
在某个时刻,您知道要在该表中插入的最新对象,并且您只想在此后没有插入新对象时才创建新对象.
如果是更新,您可以根据修订号进行过滤:
updated = Account.objects.filter(
id=self.id,
version=self.version,
).update(
balance=balance + amount,
version=self.version + 1,
)
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何记录的方式来为a create()或save()call 提供条件.
我正在寻找在SQL查询级别应用这些条件的东西,以避免"读 - 修改 - 写"问题.
我是django的新手.
我想创建一个自定义小部件.
forms.py:
from project.widgets import MultiChoiceFilterWidget
class CustomSearchForm(FacetedSearchForm):
TEST_COLORS = [
u"Blau", u"Rot", u"Gelb"
]
color = forms.MultipleChoiceField(
label=_("Color"), choices=[(x, x) for x in TEST_COLORS],
widget=MultiChoiceFilterWidget, required=False)
Run Code Online (Sandbox Code Playgroud)
widget.py:
class MultiChoiceFilterWidget(forms.widgets.CheckboxSelectMultiple):
template_name = 'project/widgets/filter.html'
option_template_name = 'ptoject/widgets/filter_option.html'
Run Code Online (Sandbox Code Playgroud)
项目/部件/ filter.html:
<h1>TEST</h1>
Run Code Online (Sandbox Code Playgroud)
但它不会渲染新模板,相反它仍然呈现旧方式.
你能给我一些提示吗?
我想用django-filter在我的django-graphene解析器中总结一个字段.通常我的解析器看起来像:
my_model = DjangoFilterConnectionField(
MyModelNode,
filterset_class=MyModelFilter)
def my_resolver(self, args, context, info):
return MyModelFilter(
data=format_query_args(args),
queryset=self).qs
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.
但是,我想为模型过滤器提供自定义查询集,以便我可以对字段执行聚合.我正在尝试做这样的事情:
def my_resolver(self, args, context, info):
queryset = MyModel.objects.values(
'customer_id').annotate(
cost_amt=Sum('cost_amt', output_field=FloatField()))
return MyModelFilter(
data=format_query_args(args),
queryset=queryset).qs
Run Code Online (Sandbox Code Playgroud)
检查GraphiQL中的原始SQL,它看起来是正确的.但是,我从GraphQL收到的错误消息是
"message": "Received incompatible instance \"{'cost_amt': 260.36, 'customer_id': 300968697}\"."
Run Code Online (Sandbox Code Playgroud)
这是正确的结果,但我不确定为什么GraphQL从django-graphene获取此对象.如何提供自定义查询集并使其工作?
我们最近更改了部署策略以使用AWS自动扩展组.
我们在生产中遇到的一个问题是新创建的EC2.
我们的申请开始返回:
Invalid HTTP_HOST header:
<ip_address>. You may need to add <ip_address> to ALLOWED_HOSTS`
Run Code Online (Sandbox Code Playgroud)
因为这些EC2不在原来的Django中ALLOWED_HOSTS.
每个新创建的EC2都必须重新部署是没有意义的; 这与"汽车规模"的意义相矛盾.
此外,出于安全原因,我们不希望使用通配符或IP范围.
我们能做什么?
我有一个在Heroku上运行的Django应用程序.为了存储和提供我的静态文件,我将django-storage与我的S3存储桶以及标准的Django一起使用ManifestFilesMixin.我也在使用django-pipeline.
在代码中:
from django.contrib.staticfiles.storage import ManifestFilesMixin
from storages.backends.s3boto import S3BotoStorage
from pipeline.storage import PipelineMixin
class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
pass
Run Code Online (Sandbox Code Playgroud)
设置有效,但staticfiles.json清单也存储在S3上.我可以看到两个问题:
我的应用程序的存储实例必须staticfiles.json从S3 获取,而不是仅从本地文件系统获取它.这在性能方面毫无意义.清单文件的唯一使用者是服务器应用程序本身,因此它也可以存储在本地文件系统而不是远程.
我不确定这个问题有多重要,因为我想(或希望)服务器应用程序在读取一次后缓存该文件.
清单文件是在部署期间编写的collectstatic,因此,如果任何已运行的服务器应用程序版本的实例在部署完成之前从S3读取清单文件并且新的slug接管,则它们可能会获取错误的静态文件 -只应该为新的slug实例提供服务.
请注意,特别是在Heroku上,新的应用程序实例可能会动态弹出,因此即使应用程序确实缓存了清单文件,它的第一次获取也可能是在部署新的slug期间.
所描述的场景特定于Heroku,但我想其他环境会出现类似的问题.
显而易见的解决方案是将清单文件存储在本地文件系统上.每个slug都有自己的清单文件,性能最佳,并且不会有如上所述的任何部署比赛.
可能吗?
我认为在最近的Django版本中有一个简单的答案,但我找不到它.
我有触及数据库的代码.我希望每次Django启动时都能运行它.我似乎有两个选择:
选项1. AppConfig.ready() - 这可以工作,但也可以在创建数据库表之前运行(即在测试期间或在没有数据的情况下重新初始化应用程序时).如果我使用它,我必须捕获多种类型的异常,并猜测原因是一个空数据库:
def is_db_init_error(e, table_name):
return ("{}' doesn't exist".format(table_name) in str(e) or
"no such table: {}".format(table_name) in str(e)
)
try:
# doing stuff
except Exception as e:
if not is_db_init_error(e, 'foo'):
raise
else:
logger.warn("Skipping updating Foo object as db table doesn't exist")
Run Code Online (Sandbox Code Playgroud)
选项2.使用post_migrate.connect(foo_init, sender=self)- 但这仅在我进行迁移时运行.
选项3.旧的方式 - 从中调用urls.py- 我想保留这样的东西urls.py,我认为这AppConfig是一条真正的道路
到目前为止,我已经确定了选项2了 - 我不喜欢选项1和选项3中的臭臭尝试/除了东西,因为它urls.py变成了倾销场.
但是,当我在本地开发时,选项2经常让我兴奋 - 我需要记住每当我想要运行init代码时运行迁移.拉下生产数据库或类似数据库之类的事情通常会导致问题,因为不会触发迁移.
说我有这个任务:
def do_stuff_for_some_time(some_id):
e = Model.objects.get(id=some_id)
e.domanystuff()
Run Code Online (Sandbox Code Playgroud)
而我正在使用它:
do_stuff_for_some_time.apply_async(args=[some_id], queue='some_queue')
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,使用相同的arg参数有很多重复性任务,并且它在队列中令人难以置信.
只有在队列中没有相同的args和相同的任务时才可以应用异步吗?
我的记录器看起来像这样:
log_config = {
"version": 1,
"disable_existing_loggers": True,
"formatters": {
"default": {
"()": "uvicorn.logging.DefaultFormatter",
"fmt": "%(asctime)s::%(levelname)s::%(name)s::%(filename)s::%(funcName)s::%(message)s",
"datefmt": "%Y-%m-%dT%H:%M:%S%z",
"use_colors": False,
},
"access": {
"()": "uvicorn.logging.AccessFormatter",
"datefmt": "%Y-%m-%dT%H:%M:%S%z",
"fmt": '%(asctime)s::%(levelprefix)s %(client_addr)s - "%(request_line)s" %(msecs)d %(status_code)s',
"use_colors": False,
},
},
"handlers":
{
"default":
{
"formatter": "default",
"class": 'logging.FileHandler',
"filename": CONFIG[SECTION]["default"]
},
"access":
{
"formatter": "access",
"class": 'logging.FileHandler',
"filename": CONFIG[SECTION]["access"]
},
},
"loggers":
{
"uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
"uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
}
}
Run Code Online (Sandbox Code Playgroud)
启动配置:
uvicorn.run(
app="app.main:app", …Run Code Online (Sandbox Code Playgroud) 序幕:
我在多个帖子中看到了这个问题:
并且也可以在这里应用:
我已经在SO文档中编写了一个示例,以便在上述问题中统一我的答案,但由于文档将于2017年8月8日关闭,我将遵循这个广泛上升和讨论的元答案的建议并将我的示例转换为自我回答帖子.
当然,我也很高兴看到任何不同的方法!
题:
我想APIView在Django Rest Framework项目中使用非通用视图/视图集(例如:) .
当我阅读分页文档时:
只有在使用通用视图或视图集时,才会自动执行分页.如果您使用常规
APIView,则需要自己调用分页API以确保返回分页响应.有关示例,请参阅mixins.ListModelMixin和generics.GenericAPIView类的源代码.
我还可以继续使用非通用视图/视图集吗?
我怎样才能实现分页呢?
python ×9
django ×8
amazon-ec2 ×1
amazon-s3 ×1
celery ×1
deployment ×1
django-orm ×1
fastapi ×1
graphql ×1
javascript ×1
logging ×1
pagination ×1
rabbitmq ×1
rxjs5 ×1
uvicorn ×1
widget ×1