小编cod*_*y46的帖子

Golang 中 logrus 的 CustomFormatter 显示文件名和行号

我正在使用github.com/sirupsen/logrus来登录我的 golang 脚本,但是我想获取记录消息的文件名和行号。我可以使用下面的代码得到它:

package main

import (
    "fmt"
    "os"
    "runtime"
    "strings"

    "github.com/sirupsen/logrus"
)

func GetLogger() (*logrus.Logger, *os.File) {
    log := logrus.New()
    log.SetReportCaller(true)

    file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND, 0644)
    if err != nil {
        log.Fatal(err)
    }

    log.Out = file
    log.Formatter = &logrus.TextFormatter{
        CallerPrettyfier: func(f *runtime.Frame) (string, string) {
            repopath := fmt.Sprintf("%s/src/github.com/bob", os.Getenv("GOPATH"))
            filename := strings.Replace(f.File, repopath, "", -1)
            return fmt.Sprintf("%s()", f.Function), fmt.Sprintf("%s:%d", filename, f.Line)
        },
    }

    return log, file
}
Run Code Online (Sandbox Code Playgroud)

然而,这给出了以下格式的日志:

time="2020-04-02T11:43:19+05:30" level=info msg=Hello func="main.main()" file="D:/.../main.go:13"

但我想要的登录格式如下:

Apr 02 …

go

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

电子邮件字段可以用作 django rest 框架的查找字段吗

模型中的电子邮件字段可以用作其余 api 的查找字段吗?

我有一个模型“用户”,其中 username=models.CharField() 和 email=models.EmailField() 作为成员。我想将电子邮件设置为视图集中的查找字段,并具有以下相同的代码。

def get_queryset(self):
    if 'email' in self.kwargs:
        return User.objects.filter(email=self.kwargs['email'])
    else:
        return User.objects.all()

    lookup_field = 'email'
    lookup_url_kwarg = 'email'
Run Code Online (Sandbox Code Playgroud)

但是,由于电子邮件字段始终包含一个“.”,查找失败并显示“当前路径与这些中的任何一个都不匹配”消息。我们如何使用包含 '.' 的值执行成功的 api 查找。例如电子邮件

获取/api/user/abc@def.com

django django-rest-framework

2
推荐指数
1
解决办法
516
查看次数

如何在 Django Rest Framework 中显示 ManyToMany 字段的值而不是 Id?

模型:

class Genre(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Song(models.Model):
    name = models.CharField(max_length=200)
    genre = models.ManyToManyField(Genre)
Run Code Online (Sandbox Code Playgroud)

序列化器:

class GenreSerializer(serializers.ModelSerializer):

    class Meta:
        model = Genre
        fields = '__all__'


class SongSerializer(serializers.ModelSerializer):

    class Meta:
        model = Song
        fields = '__all__'

    def to_representation(self, instance):
        rep = super().to_representation(instance)
        print(GenreSerializer(instance.name).data)
        return rep
Run Code Online (Sandbox Code Playgroud)

序列化程序中的上述打印给出: {'name': None} 并且响应使用流派 ID 而不是值:

[
    {
        "id": 1,
        "name": "Abcd",
        "genre": [
            1,
            3
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

其中流派1. 流行3. 摇滚

我可以对 to_representation 进行哪些更改以打印值而不是流派的 id,流派是具有歌曲模型的 ManyToManyField。

python django-rest-framework

2
推荐指数
1
解决办法
2987
查看次数

如何在 Django Rest Framework 中显示字段值而不是外键 id,确保所有字段都像以前一样显示在 DRF HTML 表单上

模型:

class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    
    def __str__(self):
        return self.first_name + ' ' + self.last_name
        
        
class Gender(models.Model):
    gender = models.CharField(max_length=1)
    
    def __str__(self):
        return self.gender
        
        
class Details(models.Model):
    name = models.ForeignKey(Person, on_delete=models.CASCADE)
    dob = models.DateField()
    gender = models.ForeignKey(Gender, on_delete=models.DO_NOTHING)
Run Code Online (Sandbox Code Playgroud)

序列化器:

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = '__all__'


class GenderSerializer(serializers.ModelSerializer):

    class Meta:
        model = Gender
        fields = '__all__'


class ProfileSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Profile
        fields = ['name', 'dob', 'gender']
Run Code Online (Sandbox Code Playgroud)

目前,我得到的输出低于上面的输出:

[
    {
        "name": 1,
        "dob": "1990-05-19", …
Run Code Online (Sandbox Code Playgroud)

python django-rest-framework

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

awk:仅当下一行也以相同的模式开始时,才打印以模式开头的行

我读了一篇类似的帖子,标题为"只有当下一行与模式不匹配时才打印匹配模式的行",所提到的解决方案是

awk 'a=/^O/{x=$0} !a&&x{print x;x=0;}' myfile
Run Code Online (Sandbox Code Playgroud)

我只是想知道如果我想打印下一行也以与当前行相同的模式开始的文件中的所有行,上述命令将如何改变.

例如

文件文本包含:

abc this is a line
def
abc this is line 2
ghi
abc this is line 3
abc this is line 4
jkl
mno
abc this is line 5
jkl
abc this is line 6
abc this is line 9
jkl
Run Code Online (Sandbox Code Playgroud)

该命令应该只打印以下行:

abc this is line 3
abc this is line 6
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

感谢所有帮助过的人.在这里编辑原始问题以满足要求,因为当存在多个相似的行时,以下将无济于事.

如果要打印文件中的所有行以使下一行以不同的模式结束,那么awk命令会是什么?

例如:如果文件包含:

Student name is A
Student name is B
Student name is C
result …
Run Code Online (Sandbox Code Playgroud)

awk

0
推荐指数
1
解决办法
877
查看次数

标签 统计

django-rest-framework ×3

python ×2

awk ×1

django ×1

go ×1