小编Mic*_*ays的帖子

如何在用户设置中为 VS Code python Sort Imports 配置行长?

我正在使用VS Code 的 Python 扩展的排序导入功能。我想将此行的长度配置为 100;但是,我一直无法在我的settings.json文件中正确设置它。从文档来看,它似乎"python.sortImports.args": ["-l", "100"]应该可以工作,但它给了我一个错误:Invalid patch string: Skipped 1 files.

有任何想法吗?

python visual-studio-code vscode-settings

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

如何在 Django REST Framework 中验证完整模型数据

长话短说

在我的方法中,如果传入数据中未设置它,Serializer.validate我需要能够访问attrs['field']并回退,我想知道是否有一个通用的模式可以这样做。self.instance.field

问题

以DRF 序列化器文档的对象级验证部分为例:

from rest_framework import serializers

class EventSerializer(serializers.Serializer):
    description = serializers.CharField(max_length=100)
    start = serializers.DateTimeField()
    finish = serializers.DateTimeField()

    def validate(self, attrs):
        """
        Check that start is before finish.
        """
        if attrs['start'] > attrs['finish']:
            raise serializers.ValidationError("finish must occur after start")
        return attrs
Run Code Online (Sandbox Code Playgroud)

(这使用正常的Serializer,但想象它是模型ModelSerializer的a Event。)

当创建或更新事件时,数据中包含start和属性,则此序列化程序将按预期工作。finish

但是,如果您提出如下请求:

client.patch(f"/events/{event.id}", {"start": "2021-01-01"})
Run Code Online (Sandbox Code Playgroud)

那么序列化器将会失败,因为尝试访问会attrs['finish']产生KeyError. 在这种情况下,我需要能够回退到self.instance.finish,因为start < finish验证仍然是必要的。

有解决这个问题的通用模式吗?

目前的解决方案

您可以通过在所有方法的开头添加一个代码片段来解决此问题 …

python django django-rest-framework

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

在 Django Heroku 应用程序中使用日志记录 print() 将信息记录到 Papertrail 的好处

我有一个 Django 应用程序,我托管在 Heroku 上,并通过 Papertrail Heroku 附加组件登录到 Papertrail。我在很多地方直接将信息记录到 Papertrail,目前通过:

logger = logging.getLogger('papertrail')
logger.info('important text')
Run Code Online (Sandbox Code Playgroud)

我根据此链接设置日志记录配置:

import sys

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'ERROR',
        },
        'papertrail': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

总之,这会像这样记录到 Papertrail:

Feb 07 06:10:56 app_name app/worker.1: important text
Run Code Online (Sandbox Code Playgroud)

但是,我注意到 usingprint('important text')在这里完成了同样的事情。在这种情况下继续使用loggingoverprint来记录“重要文本”有什么好处吗?我通读了这篇文章,似乎没有一条适用于此。

python django logging heroku papertrail-app

3
推荐指数
1
解决办法
260
查看次数