(使用Django2.0) 这是我第一次尝试与前端开发人员合作,我正在尝试从通用ListView序列化Django模型。即使我设法发送一个JsonResponse作为json我的对象,它们总是一个字符串:
"[{\"model\": \"questions.question\", \"pk\": 9535, \"fields\": {\"created\": \"2018-04-14T17:02:38.559Z\", \"modified\": \"2018-04-14T18:04:14.264Z\", \"question\": \"TEST\", \"category\": \"Rules\", \"event\": \"Beyonce\", \"answer\": \"aergaergaergaer\", \"verified\": true, \"verified_by\": [\"someotheruser\"], \"count\": 0, \"user_created\": [\"someuser\"]}}]"
前端开发人员解决此问题的方式是调用JSON.parse()。 (见:https://www.w3schools.com/js/js_json_parse.asp)。
这是正确的方法,还是应该在没有字符串的情况下返回对象?
如果我错了,并且有一种方法可以在没有字符串的情况下执行此操作,那么我的观点和网址是:
views.py:
from events.models import Event
from django.core import serializers
from django.http import JsonResponse
class EventView(LoginRequiredMixin, ListView):
login_url = '/accounts/login/'
model = Question
template_name = 'faq/faq.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
events_list = Event.objects.all()
context['events_list'] = events_list
return context
def get_queryset(self):
event = Event.objects.get(event=self.kwargs['event'])
queryset = Question.objects.filter(event=event)
return queryset
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
data = serializers.serialize("json", queryset, use_natural_foreign_keys=True)
return JsonResponse(data, status=200, safe=False)
urls.py
urlpatterns += [
path('<str:event>/', EventView.as_view(), name='event'),
]
我也尝试过:
def EventRequest(request, **kwargs):
event = Event.objects.get(event=kwargs['event'])
queryset = Question.objects.filter(event=event)
data = serializers.serialize("json", queryset, use_natural_foreign_keys=True)
dump = json.dumps(data)
return HttpResponse(dump, content_type='application/json')
和
def EventRequest(request, **kwargs):
event = Event.objects.get(event=kwargs['event'])
queryset = Question.objects.filter(event=event)
data = serializers.serialize("json", queryset, use_natural_foreign_keys=True)
return JsonResponse(data, status=200, safe=False)
再一次,这可能绝对正确,前端开发人员应该只做一个JSON.parse()。请让我知道,谢谢!
答案 0 :(得分:1)
这很正常。 JSON是一个字符串表示法。它只是一种将JavaScript对象和数组(Python dicts和列表)表示为字符串的格式。
在前端,您必须使用JSON.parse()
将其转换为JavaScript数组(列表)或对象(dict)。
当您从前端向后端发送JSON时,这也适用。您使用JSON.stringify()
将JS对象转换为字符串。然后在后端使用json.loads()
将该字符串转换为Python对象。