【发布时间】: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会发生什么?
标签: python django utf-8 django-rest-framework django-templates