小编Ade*_*laN的帖子

ModelSerializer在Django REST框架中非常慢

我正在为我的API使用Django REST框架,昨天我想看看它如何适用于大数据.我找到了关于如何描述你的请求的教程(由Tom Christie编写),我发现对于10,000个用户,我的请求花费了惊人的2:20分钟.

大部分时间花在序列化对象上(大约65%),所以我想知道我该怎样做才能加快速度?

我的用户模型实际上扩展了默认的django模型,因此使用.values()不起作用,因为我也没有得到嵌套模型(即使它更快了).

任何帮助将不胜感激 :)

编辑

我在检索我的查询集时已经在使用.select_related(),它已经改善了我的时间,但只有几秒钟.总查询数是10,所以我的问题不在于数据库访问.

另外,我使用.defer(),以避免在此请求中不需要的字段.这也提供了一个小的改进,但还不够.

编辑#2

Models

from django.contrib.auth.models import User
from django.db.models import OneToOneField
from django.db.models import ForeignKey

from userena.models import UserenaLanguageBaseProfile
from django_extensions.db.fields import CreationDateTimeField
from django_extensions.db.fields import ModificationDateTimeField

from mycompany.models import MyCompany


class UserProfile(UserenaLanguageBaseProfile):
    user = OneToOneField(User, related_name='user_profile')
    company = ForeignKey(MyCompany)
    created = CreationDateTimeField(_('created'))
    modified = ModificationDateTimeField(_('modified'))
Run Code Online (Sandbox Code Playgroud)

Serializers

from django.contrib.auth.models import User

from rest_framework import serializers

from accounts.models import UserProfile


class UserSerializer(serializers.ModelSerializer):
    last_login = serializers.ReadOnlyField()
    date_joined = serializers.ReadOnlyField() …
Run Code Online (Sandbox Code Playgroud)

django django-orm django-rest-framework

9
推荐指数
3
解决办法
7138
查看次数

使用Kubernetes进行多个Volume挂载:一种可行,一种不可行

我正在尝试用单个容器创建一个Kubernetes容器,该容器上装有两个外部卷。我的.yml pod文件是:

apiVersion: v1
kind: Pod
metadata:
  name: my-project
  labels:
    name: my-project
spec:
  containers:
    - image: my-username/my-project
      name: my-project
      ports:
        - containerPort: 80
          name: nginx-http
        - containerPort: 443
          name: nginx-ssl-https
      imagePullPolicy: Always
      volumeMounts:
        - mountPath: /home/projects/my-project/media/upload
          name: pd-data
        - mountPath: /home/projects/my-project/backups
          name: pd2-data
  imagePullSecrets:
    - name: vpregistrykey
  volumes:
    - name: pd-data
      persistentVolumeClaim:
        claimName: pd-claim
    - name: pd2-data
      persistentVolumeClaim:
        claimName: pd2-claim
Run Code Online (Sandbox Code Playgroud)

我正在使用“持久卷”和“持久卷声明”,例如: PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pd-disk
  labels:
    name: pd-disk
spec:
  capacity:
    storage: 250Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk: …
Run Code Online (Sandbox Code Playgroud)

persistent-storage kubernetes

6
推荐指数
2
解决办法
9164
查看次数

如何在django-rest-framework 3.0序列化程序中检查OPTIONS请求?

我试图创建具有DRF 3.0动态字段串行,作为解释在这里。我应该为POST,GET和OPTIONS请求返回不同的字段。

但是,似乎当我向服务器发出OPTIONS请求时,序列化器会在中以'POST'调用request.method。我也研究了request._method,但这是同一回事。那么,如何区分“ POST”和“ OPTIONS”?

谢谢。

rest serialization http django-rest-framework

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

如何使用postgres数据库,Docker和Kubernetes来保存数据?

我正在尝试在我的容器上安装一个永久磁盘,该容器运行Postgres自定义映像.我正在使用Kubernetes并遵循教程.

这是我的db_pod.yaml档案:

apiVersion: v1
kind: Pod
metadata:
  name: lp-db
  labels:
    name: lp-db
spec:
  containers:
    - image: my_username/my-db
      name: my-db
      ports:
        - containerPort: 5432
          name: my-db
      volumeMounts:
        - name: pg-data
          mountPath: /var/lib/postgresql/data
  volumes:
    - name: pg-data
      gcePersistentDisk:
        pdName: my-db-disk
        fsType: ext4
Run Code Online (Sandbox Code Playgroud)

我使用命令创建磁盘gcloud compute disks create --size 200GB my-db-disk.

但是,当我运行pod时,删除它,然后再次运行它(就像在教程中一样)我的数据不会持久化.

我尝试了这个文件的多个版本,包括PersistentVolumes和PersistentVolumeClaims,我尝试更改mountPath,但没有成功.

编辑

用于创建Postgres图像的Dockerfile:

FROM ubuntu:trusty
RUN rm /bin/sh && \
    ln -s /bin/bash /bin/sh

# Get Postgres
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list.d/pgdg.list
RUN …
Run Code Online (Sandbox Code Playgroud)

postgresql persistence docker kubernetes

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