我仍然无法从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访问列表中.但是,这似乎不对,是吗?
我使用带有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-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和普通字典有什么区别?或者我是以错误的方式接近这个?