小编Sam*_*and的帖子

石墨烯在其响应中发送 Python 错误消息 - 我如何告诉它更加离散?

我使用 Django 和 Graphene 在 Python 中实现了 GraphQL 服务器。我有使用模型形式的突变,大致如下所示:

def mutate(self, info, **kwargs):
    form = MyModelForm(kwargs)
    if form.is_valid():
        form.save()
        return MyMutation(instance=form.instance)
    raise GraphQLError(json.dumps(form.errors))
Run Code Online (Sandbox Code Playgroud)

也就是说,如果表单验证失败,则将表单错误作为 JSON 字符串发送,以便前端可以整齐地解包错误。这一切都很好。

但是,如果存在其他错误 - 比如说数据库存在问题,当表单尝试保存时会引发异常,或者存在拼写错误,那么石墨烯的默认行为是获取错误消息并在 GraphQL 中传输它错误列表给客户端。这意味着检查响应的任何人都可以看到来自服务器的原始错误消息。这似乎不明智 - 如果该错误消息包含我不想泄漏的信息怎么办?显然,解决方案是创建一个不抛出异常的应用程序,但我无法预见一切。有没有办法告诉石墨烯更加离散,并在错误不是由我显式引发 GraphQLError 引起时提供通用错误消息,而不是仅仅将所有内容发送到客户端?

当前正在发生的事情的一个例子:

{"errors":[{"message":"name 'LogiForm' is not defined","locations":[{"line":2,"column":3}],"path":["login"]}],"data":{"login":null}} 
Run Code Online (Sandbox Code Playgroud)

这个特定的示例不是安全问题,很容易在生产之前捕获,但这只是一个示例 - 即使不是安全威胁,我的服务器让客户端可以查看其内部错误消息似乎有点不专业。

我目前正在用装饰器解决这个问题:

def hide_error(mutate):
    def new_func(*args, **kwargs):
        try:
            return mutate(*args, **kwargs)
        except Exception as e:
            raise e if isinstance(e, GraphQLError) else Exception("Error.")
    return new_func
Run Code Online (Sandbox Code Playgroud)

但还有更好的办法吗?您“应该”有办法解决这个问题吗?

python error-handling graphql graphene-python graphene-django

6
推荐指数
0
解决办法
1258
查看次数

有人可以解释一下Postgresql角色,Postgresql用户和Linux用户之间的关系吗?

我正在尝试在Ubuntu 14服务器上设置Postgres 9.3,这时我感到很沮丧。我以前使用过MySQL,因此对一般的数据库概念以及客户端/服务器模型等感到满意。

我从两个用户开始-“ root”和“ sam”(我)。作为“ sam”,我使用apt-get安装postgresql。这还会创建第三个用户,称为“ postgres”。

精细。

我被告知要使用postgres,您必须以postgres用户身份登录,所以我切换到该帐户。显然,这带有一个postgres管理员角色(我认为角色本身的概念还不错),而且显然所有角色都有一个同名的关联数据库(?)。因此,现在我有一个名为postgres的Linux帐户,一个名为postgres的角色和一个名为postgres的数据库?这一切似乎都是不必要的,但是我假设它出于我不知道的原因是有用的(不是讽刺的意思-通常情况一开始看起来过于复杂)。

因此,要创建数据库,我是否以postgres身份登录服务器,通过键入“ psql”(不要求输入密码-为什么postgres帐户没有密码?)来启动postgres,然后从那里继续?还是我应该创建一个新角色?该角色需要自己的Linux用户吗?角色应该与我要创建的数据库同名吗?

我很高兴这有点混乱,但是我的困惑使我什至不确定我是否了解这里的基本原理。我想念MySQL。

我主要使用的是DigitalOcean教程 -通常非常好-但实际上并不清楚。我还阅读了没有帮助的postgres文档(特别是安装和用户/角色部分),而Google的搜索结果甚至没有帮助。

这是我回到MySQL安全毯之前的最后希望。有什么建议可以进行此点击?

postgresql ubuntu roles postgresql-9.3

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