Как исправить UnicodeDecodeError в Python (шаблон Django Rest Framework)? - PullRequest
1 голос
/ 23 апреля 2019

Я запускаю веб-приложение Django и создаю REST Api с использованием Django Rest Framework. Я создал базовое представление списка / обновления, однако, когда я перехожу на URL, я получаю сообщение «Произошла ошибка сервера. Пожалуйста, свяжитесь с администратором. и в консоли: UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xe2 в позиции 9735: порядковый номер не в диапазоне (128).

Я подозреваю, что это как-то связано с шаблоном, предположительно DRF, как сказано в позиции 9735.

Эта ошибка не является глобальной, так как форма в другой части моего сайта работает отлично.

Я даже не уверен, какие файлы показывать, но models.py

            from django.db import models
            from django.contrib.auth.models import AbstractUser
            from django.db import models

            # Create your models here.


            class User(AbstractUser):

                type = models.CharField(max_length = 30, null = True, default = "")


            class NewsPost(models.Model):

                title = models.CharField(max_length = 30, null = True, default = "")
                content = models.TextField(max_length = 1000, null = True, default = "")

                def __unicode__(self):
                    return u'Title is %s' % self.title

            class Emergency(models.Model):

                title = models.CharField(max_length = 30, null = True, default = "")
                content = models.TextField(max_length=1000, null=True, default="")


            class EventUpdate(models.Model):



                type = models.CharField(max_length = 30, null = True, default = "")
                status = models.CharField(max_length = 300, null = True, default = "")

views.py

            from django.shortcuts import render, render_to_response,HttpResponse, redirect
            from .forms import *
            from rest_framework import generics, mixins
            from .serializers import *
            # Create your views here.
            def events(request):
               context = {'test': 1}
               return render(request, 'events.html', context = context)


            def newspostform(request):
                if request.method == 'POST':
                    form = NewsForm(request.POST)
                    if form.is_valid():
                        form.save()
                        return redirect('/dashboard')
                    else:
                        form = NewsForm()
                else:
                    form = NewsForm()
                return render(request, 'newspostview.html', {'form': form})


            class NewsPostAPIView(generics.ListCreateAPIView):

                queryset = NewsPost.objects.all()
                serializer_class        = NewsPostSerializer

serializers.py

из сериализаторов импорта rest_framework из .models import *

            class NewsPostSerializer(serializers.ModelSerializer):

                class NewsPost:
                      model = NewsPost
                      fields = (
                        'title',
                        'content',
                      )

шаблоны в settings.py

            TEMPLATES = [
                {
                    'BACKEND': 'django.template.backends.django.DjangoTemplates',
                    'DIRS': [os.path.join(BASE_DIR, 'templates')],
                    'APP_DIRS': True,
                    'OPTIONS': {
                        'context_processors': [
                            'django.template.context_processors.debug',
                            'django.template.context_processors.request',
                            'django.contrib.auth.context_processors.auth',
                            'django.contrib.messages.context_processors.messages',
                        ],
                    },
                },
            ]

URL в приложении:

                            urlpatterns = [
                                    path('news-api/', NewsPostAPIView.as_view(), name = 'newsav'),
                            ]

URL в основном:

 urlpatterns = [
                path('admin/', admin.site.urls),
                path('events/', views.events),
                path('newspost/', views.newspostform),
                path('api/', include('vivapi.urls')),
            ]

Другая информация: я использую Django 2.2 на Python 3.6.

Любая помощь ценится. Гугл ли эту проблему, но нашел только общую информацию, не относящуюся к этому сценарию. Я также запустил sys.getdefaultencoding () в оболочке, и он вернул 'utf-8'. Ранее я создавал API для одной и той же системы с одинаковыми версиями Python и Django, поэтому совершенно не понимаю, почему это произошло.

Спасибо, Rohan

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Исправлено: в сериализаторах класс NewsPost заменен на Meta, упс.

0 голосов
/ 23 апреля 2019

На аналогичный вопрос ответили в посте о стеке над потоком (хотя это не относится к фреймворку Django), пожалуйста, посмотрите, работает ли он для вас. UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xe2 в позиции 13: порядковый номер не в диапазоне (128)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...