如何修复 Python(Django Rest 框架模板)中的 UnicodeDecodeError?

Posted

技术标签:

【中文标题】如何修复 Python(Django Rest 框架模板)中的 UnicodeDecodeError?【英文标题】:How to fix UnicodeDecodeError in Python (Django Rest Framework template)? 【发布时间】:2019-09-13 02:25:53 【问题描述】:

我正在运行一个 Django Web 应用程序并使用 Django Rest Framework 创建一个 REST Api。我创建了一个基本列表/更新视图,但是当我转到 url 时,我得到“发生服务器错误”。请联系管理员。并在控制台中:UnicodeDecodeError:'ascii'编解码器无法解码位置 9735 中的字节 0xe2:序数不在范围内(128)。

我怀疑这与模板有关,可能是 DRF,因为它说位置 9735。

此错误不是全球性的,因为我网站不同部分的表单运行良好。

我什至不确定要显示哪些文件,但是, 模型.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

序列化器.py

从 rest_framework 导入序列化程序 从 .models 导入 *

            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。

感谢任何帮助。谷歌搜索了这个问题,但只找到了通用信息,而不是特定于这种情况。我还在 shell 中运行了 sys.getdefaultencoding(),它返回了“utf-8”。 我之前在同一个系统上创建了一个 api,使用相同版本的 Python 和 Django,所以我真的不知道为什么会这样。

谢谢, 罗汉

【问题讨论】:

如果将模型中的__unicode__ 方法更改为__str__ 并删除字符串前面的u 会发生什么? 【参考方案1】:

已修复:序列化程序的 NewsPost 类插入了 Meta,哎呀。

【讨论】:

【参考方案2】:

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

【讨论】:

接受的答案(几乎)与此无关。我不知道把decode放在哪里。如果您有一些,请将其包含在您的答案中。

以上是关于如何修复 Python(Django Rest 框架模板)中的 UnicodeDecodeError?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复在 Django Rest Framework 中使用 REST API 登录时出现的 CSRF 错误?

如何修复 Reactjs、Django、Django Rest Frame 工作项目中的“net::ERR_CONNECTION_REFUSED 和错误:网络错误”错误

api rest 调用更新 django 模型时出现错误 415

修复 Django Rest Framework 模型序列化程序相关主键查询集中的错误

Python前后端分离开发Vue+Django REST framework实战_Django REST framework框架

Python 3 & Django Rest Framework - 如何查询 M-1-M 模型?