如何在Python(Django Rest Framework模板)中修复UnicodeDecodeError?

时间:2019-04-23 20:37:00

标签: python django utf-8 django-rest-framework django-templates

我正在运行Django Web应用程序,并使用Django Rest Framework创建REST Api。我已经创建了一个基本的列表/更新视图,但是当我转到url时,会收到“发生服务器错误。请与管理员联系。并在控制台中:UnicodeDecodeError:'ascii'编解码器无法解码9735位置的字节0xe2:序数不在range(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',
                        ],
                    },
                },
            ]

应用程序中的网址:

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

主要网址:

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

其他信息:我正在python 3.6上运行Django 2.2。

任何帮助都值得赞赏。谷歌没有这个问题,但只找到通用信息,而不是特定于这种情况。我还在外壳中运行sys.getdefaultencoding(),它返回了“ utf-8”。 之前,我在同一系统上使用相同版本的Python和Django创建了一个api,所以对于这种情况的发生我一无所知。

谢谢, 罗汉

2 个答案:

答案 0 :(得分:0)

已修复:哎呀,序列化程序让NewsPost类插入了元数据。

答案 1 :(得分:-1)

类似的问题在堆栈溢出流程中得到了解答(尽管它不适用于Django framework),请查看是否适合您。 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128)