Javascript 如何在基于Django类的视图中按mime类型区分响应?
在基于类的视图中,我可以为Javascript 如何在基于Django类的视图中按mime类型区分响应?,javascript,python,django,api,rest,Javascript,Python,Django,Api,Rest,在基于类的视图中,我可以为GET或POST定义方法。我可以为不同mime类型的响应定义特殊的方法吗 用例是——即使关闭JS,也要使AJAX站点可用 import json from django.http import HttpResponse from django.views.generic.edit import CreateView from myapp.models import Author class AjaxableResponseMixin(object): """
GET
或POST
定义方法。我可以为不同mime类型的响应定义特殊的方法吗
用例是——即使关闭JS,也要使AJAX站点可用
import json
from django.http import HttpResponse
from django.views.generic.edit import CreateView
from myapp.models import Author
class AjaxableResponseMixin(object):
"""
Mixin to add AJAX support to a form.
Must be used with an object-based FormView (e.g. CreateView)
"""
def render_to_json_response(self, context, **response_kwargs):
data = json.dumps(context)
response_kwargs['content_type'] = 'application/json'
return HttpResponse(data, **response_kwargs)
def form_invalid(self, form):
response = super(AjaxableResponseMixin, self).form_invalid(form)
if self.request.is_ajax():
return self.render_to_json_response(form.errors, status=400)
else:
return response
def form_valid(self, form):
# We make sure to call the parent's form_valid() method because
# it might do some processing (in the case of CreateView, it will
# call form.save() for example).
response = super(AjaxableResponseMixin, self).form_valid(form)
if self.request.is_ajax():
data = {
'pk': self.object.pk,
}
return self.render_to_json_response(data)
else:
return response
class AuthorCreate(AjaxableResponseMixin, CreateView):
model = Author
fields = ['name']
请从文档中查看此示例:
有两种情况:表格是否有效。
从这里我们有两种情况:如果请求是否基于AJAX(request.is_AJAX)您可以检查
request.META的Accept
标题,以决定返回哪种响应格式,并使用适当的序列化程序将“一般响应”序列化为适当的格式。这和我的想法很相似。