Python django中的慢响应

Python django中的慢响应,python,sql,django,postgresql,django-rest-framework,Python,Sql,Django,Postgresql,Django Rest Framework,目前,我正在使用django调试工具栏检查django查询(django rest框架)。postgres数据库查询时间大约为100ms,这是可以的。但响应时间约为6秒,速度很慢 我发现最慢(大约需要4秒)的函数是: @transaction.atomic def create(self, *args, **kwargs): response = super(PersonView, self).create(*args, **kwargs) dat

目前,我正在使用django调试工具栏检查django查询(django rest框架)。postgres数据库查询时间大约为100ms,这是可以的。但响应时间约为6秒,速度很慢

我发现最慢(大约需要4秒)的函数是:

    @transaction.atomic
    def create(self, *args, **kwargs):
        response = super(PersonView, self).create(*args, **kwargs)
        data = response.data
        product_data = data['packages'][0]['product']
        person = Person.objects.get(pk=data['id'])
        if not person.info:
            product = Product.objects.get(pk=product_data['id'])
            PersonItem.objects.create(person=person, product=product)
        response.data = PersonSerializer(person).data
        return response

Any ideas why the response is so slow or why this function takes so long ?
编辑: 这是我的PersonSerializer课程

class PersonSerializer(serializers.ModelSerializer):
    person_items = PersonItemSerializer(many=True, read_only=True)
    address = AddressSerializer(read_only=True)
    office_address = serializers.SerializerMethodField('get_office_address')
    status = ChoiceWithNameField(choices=Person.STATUS_CHOICES)
    source = ChoiceWithNameField(
        choices=Person.SOURCE_CHOICES, required=False)
    closing_person = ClosingPersonSerializer(read_only=True)
    is_upfront_person = serializers.BooleanField(read_only=True)
    has_discount = serializers.BooleanField(read_only=True)
    payment_method = serializers.CharField(read_only=True)
    user_email = serializers.CharField(
        read_only=True, source='user.email')
    user_display_name = serializers.CharField(
        read_only=True, source='user.display_name')
    billing_display_address = serializers.SerializerMethodField(
        'get_billing_display_address')
    real_estate_display_address = serializers.SerializerMethodField(
        'get_real_estate_display_address')
    net_total = serializers.DecimalField(read_only=True, source='net_total')
    gross_total = serializers.DecimalField(read_only=True, source='gross_total')
    tax = serializers.DecimalField(read_only=True, source='tax_total')
    coupon_net_total = serializers.DecimalField(read_only=True,
                                                source='coupon_net_total')
    coupon_gross_total = serializers.DecimalField(read_only=True,
                                                  source='coupon_gross_total')

    class Meta:
        model = Person
        policy_class = PersonPolicy

    def get_billing_display_address(self, obj):
        try:
            address = obj.address
        except Address.DoesNotExist:
            pass
        else:
            return "{0} {1}, {2}, {3}".format(
                address.house_name_number, address.address_2, address.town,
                address.postcode)

    def _filter_products(self, products):
        user = getattr(self.context.get('request'), 'user', None)
        if not user or not user.is_staff:
            products = products.filter(admin_only=False)
        return products

    def _as_person_items(self, person, products):
        persons = [PersonItem(name=p.name, description=p.description,
                            person=person,
                            price=p.total_up_front,
                            product=p) for p in products]
        return persons

    def get_packages(self, person):
        products = self._filter_products(person.packages)
        return PersonItemMinimalSerializer(
                        self._as_person_items(person, products),
                        many=True).data


    def get_office_address(self, i):
        try:
            office_address = i.addresses.get(address_type=Address.ADDRESS)
        except Address.DoesNotExist:
            return False
        return AddressSerializer(office_address, read_only=True).data

    def get_real_estate_display_address(self, obj):
        try:
            address = obj.office_address
        except Address.DoesNotExist:
            pass
        else:
            return "{0} {1}, {2}, {3}".format(
                address.house_name_number, address.address_2,
                address.town, address.postcode)

发布您的
PersonSerializer
检查
PersonSerializer
的时间。添加PersonSerializer类。现在我将尝试检查时间。您使用的是哪种Django调试工具栏版本?在启用模板选项卡时,我遇到了最新版本(1.8)减慢视图速度的问题。如果没有启用“模板”选项卡,视图的加载速度会快得多。prod上没有调试工具栏,而且速度仍然很慢。