Django Azure rest framework вызывает 500 ошибку сервера
У меня есть приложение django, которое отлично работает локально, но при развертывании на службе приложений azure я получаю ошибку 500 при запросе данных. Приложение развернуто в контейнере docker на службе azure app service:
URLs.py
path('primaryexams/', TemplateView.as_view(template_name='xxxDB/primaryexams.html'), name='primaryExams'),
path('primaryexamsdata/', views.PrimaryExamsView.as_view(), name='primaryexam_data'),
views.py
class PrimaryExamsView(generics.ListAPIView):
serializer_class = PrimaryExamSerializer
template_name='xxxDB/primaryexams.html'
def get_queryset(self):
return xxxPrimaryExamData.objects.all()
def filter_for_datatable(self, queryset):
# filtering
search_query = self.request.query_params.get('search[value]')
if search_query:
lookups = Q(xxxid__first_name__icontains=search_query)|Q(xxxid__last_name__icontains=search_query)|Q(xxxid__xx_id__icontains=search_query)
queryset = xxxPrimaryExamData.objects.filter(lookups)
return queryset
def list(self, request, *args, **kwargs):
draw = request.query_params.get('draw')
queryset = self.filter_queryset(self.get_queryset())
recordsTotal = queryset.count()
filtered_queryset = self.filter_for_datatable(queryset)
try:
start = int(request.query_params.get('start'))
except (ValueError, TypeError):
start = 0
try:
length = int(request.query_params.get('length'))
except (ValueError, TypeError):
length = 25
end = length + start
serializer = self.get_serializer(filtered_queryset[start:end], many=True)
response = {
'draw': draw,
'recordsTotal': recordsTotal,
'recordsFiltered': filtered_queryset.count(),
'data': serializer.data,
}
return Response(response)
serializers.py
class PrimaryExamSerializer(serializers.ModelSerializer):
xxx_id = serializers.ReadOnlyField(source='xxxid.xxx_id')
last_name = serializers.ReadOnlyField(source='xxxid.last_name')
first_name = serializers.ReadOnlyField(source='xxxid.first_name')
program_institution = serializers.ReadOnlyField(source='program_institution.institution_id')
program_institution_name = serializers.ReadOnlyField(source='program_institution.institution_name')
test_center_institution = serializers.ReadOnlyField(source='test_center_institution.institution_id', default='none')
class Meta:
model = AbnsPrimaryExamData
fields = (
'id','xxx_id','last_name','first_name','medical_school','program_institution','program_institution_name','graduation_year','test_center_institution'
)
Когда я пытаюсь загрузить данные, я получаю ошибку ajax, и когда я смотрю на запрос, он получает ошибку сервера 500:
https://xxxinternal.azurewebsites.net/xxxDB/primaryexamsdata/?draw=1&columns%5B0%5D%...blah...blahh
У меня есть другие представления, настроенные таким же образом, которые работают просто отлично, но по какой-либо причине это представление выбрасывает эту ошибку и не отображает данные. Когда я копирую url и вставляю его в мою локальную версию, он отображает ответ просто отлично.
Оказалось, что моя проблема была связана с gunicorn внутри докера. Запуск докера локально также не дал результата, но это дало мне больше информации: Bad Request Строка запроса слишком велика (6060 > 4094)
установка --limit-request-line 8000 устранила проблему.