小编Nus*_*chk的帖子

无法从谷歌容器引擎访问谷歌云SQL

我仍然无法从GCE容器访问云SQL实例.当我尝试打开mysql时,我收到以下错误:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial 
                    communication packet', system error: 0
Run Code Online (Sandbox Code Playgroud)

尽管如此(该实例具有公共IP并且我将办公室的IP添加到"允许的网络"),连接在本地计算机上工作正常.所以,实例可以通过互联网访问就好了.

我想db的访问控制阻止了我对gce网络的访问,但是我无法弄清楚如何配置它.

我在Cloud SQL控制面板中将我的项目添加到"授权的应用程序引擎应用程序",但这似乎没有帮助.

编辑: 如果我将"0.0.0.0/0"添加到Allowed Networks,一切正常.这显然不是我想要的,所以我需要输入什么呢?

EDIT2:我还可以从我的kubernetes集群中添加所有公共IP(通过获取gcloud compute instances list)并手动将它们添加到云sql访问列表中.但是,这似乎不对,是吗?

google-cloud-sql google-kubernetes-engine

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

与版本化API的命名空间URL基本相反

我使用带有NamespaceVersioning的django-rest-framework.我的主要urls.py看起来像这样:

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
...
Run Code Online (Sandbox Code Playgroud)

在my_api.api_urls.py中:

urlpatterns = [
    url(r'^some-endpoint/$', api_views.MyView.as_view(), name='some'),
]
Run Code Online (Sandbox Code Playgroud)

不知何故,我无法撤消这些网址.为什么我不能这样做?我得到一个NoReverseMatch例外.

reverse('some')
Run Code Online (Sandbox Code Playgroud)

我无法围绕django的命名空间,但不应该只使用最后定义的路线?如果我从主url中删除命名空间参数,一切正常.

编辑

也不工作:

reverse('v1:some') 
Run Code Online (Sandbox Code Playgroud)

我也可以补充说,在我的主urls文件中,我将多个url文件包含在api/v1 /前缀中:

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
url(r'^api/v1/', include('my_other_api.api_urls', app_name="api", namespace='v1')),
...
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

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

序列化可选的嵌套结构:QueryDict和普通字典之间的区别?

在使用django-rest编写嵌套结构然后尝试使用django-rest的测试客户端测试它们时,我遇到了奇怪的行为.嵌套的子对象应该是可选的.

这是一个示例序列化器:

from rest_framework import serializers

class OptionalChildSerializer(serializers.Serializer):
    field_b = serializers.IntegerField()
    field_c = serializers.IntegerField()

    class Meta:
        fields = ('field_b', 'field_c', )

class ParentSerializer(serializers.Serializer):
    field_a = serializers.IntegerField()
    child = OptionalChildSerializer(required=False, many=False)

    class Meta:
        fields = ('a', 'child',)

    def perform_create(self, serializer):
        # TODO: create nested object.
        pass
Run Code Online (Sandbox Code Playgroud)

(我省略了perform_create中的代码,因为它与问题无关).

现在,传递一个普通的dict作为数据参数工作正常:

ser = ParentSerializer(data=dict(field_a=3))
ser.is_valid(raise_exception=True)
Run Code Online (Sandbox Code Playgroud)

但是传递QueryDict会失败:

from django.http import QueryDict
ser = ParentSerializer(data=QueryDict("field_a=3"))
ser.is_valid(raise_exception=True)

ValidationError: {'child': {'field_b': [u'This field is required.'], 'field_c': [u'This field is required.']}}
Run Code Online (Sandbox Code Playgroud)

在实际的网站上,API得到一个正常的字典,因此工作正常.但是在测试期间,使用类似的东西client.post('url', data=dict(field_a=3))会导致QueryDict传递给视图,因此无法工作.

所以我的问题是:QueryDict和普通字典有什么区别?或者我是以错误的方式接近这个?

python django django-rest-framework

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