小编opt*_*iks的帖子

将Django和Postgresql与Docker链接起来

我有两个Docker容器.第一个是Postgresql容器,我使用以下命令运行.

sudo docker run -v /home/mpmsp/project/ezdict/postgresql/data:/var/lib/postgresql/data -p 127.0.0.1:5432:5432  -name my-postgres -d postgres
Run Code Online (Sandbox Code Playgroud)

它基于官方图像,它工作正常,我可以从主机连接到Postgresql.

第二个容器是我的Django应用程序的容器.使用以下Dockerfile构建映像(基于此映像):

FROM python:3-onbuild
EXPOSE 8000 5432
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)

然后我使用以下命令运行此容器

sudo docker run --link my-postgres:my-postgres -v /home/mpmsp/project/ezdict/ezbkend:/usr/src/app -name my-app -i -t my-app
Run Code Online (Sandbox Code Playgroud)

docker ps输出显示容器已链接

NAMES
my-app/my-postgres, my-postgres
Run Code Online (Sandbox Code Playgroud)

但是,当我转到localhost:8000时,我看到Django的错误页面,输出如下

OperationalError at /api-auth/login/
could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 5432?
Request Method: GET
Request URL:    http://127.0.0.1:8000/api-auth/login/
Django Version: 1.6.4
Exception Type: OperationalError …
Run Code Online (Sandbox Code Playgroud)

python django postgresql docker

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

Django Rest Framework,超链接嵌套关系

我有两个模型:用户票证.票证有一个用户,用户有很多票证

我已经完成了当我去url / users/1/ticket时,我得到了用户票的列表.

我想使用超链接关系,这是我在用户模型表示中看到的内容:

"tickets": [
    "http://127.0.0.1:8000/tickets/5/", 
    "http://127.0.0.1:8000/tickets/6/"
]
Run Code Online (Sandbox Code Playgroud)

但我希望它像

"tickets": "http://127.0.0.1:8000/users/1/tickets"
Run Code Online (Sandbox Code Playgroud)

有没有办法用DRF做到这一点?

网址:

    url(r'^users/(?P<user_pk>\d+)/tickets/$',
    views.TicketsByUserList.as_view(),
    name='myuser-tickets'),
Run Code Online (Sandbox Code Playgroud)

风景:

class TicketsByUserList(generics.ListAPIView):
    model = Ticket
    serializer_class = TicketSerializer

    def get_queryset(self):
        user_pk = self.kwargs.get('user_pk', None)
        if user_pk is not None:
            return Ticket.objects.filter(user=user_pk)
        return []
Run Code Online (Sandbox Code Playgroud)

用户序列化程序(我尝试使用故障单字段定义,更改类型,view_name,但没有效果):

class UserSerializer(serializers.HyperlinkedModelSerializer):
    tickets = serializers.HyperlinkedRelatedField(many=True, view_name='ticket-detail')

    class Meta:
        model = MyUser
        fields = ('id', 'nickname', 'email', 'tickets')
Run Code Online (Sandbox Code Playgroud)

票证序列化器:

class TicketSerializer(serializers.HyperlinkedModelSerializer):
    user = serializers.HyperlinkedRelatedField(view_name='myuser-detail')
    liked = …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

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