如何在基于Django类的视图中通过mime类型区分响应

How to distinguish responses by mime-type in Django class-based view?

本文关键字:mime 类型区 响应 视图 Django      更新时间:2023-09-26

在基于类的视图中,我可以为GETPOST定义方法。我能为不同的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']

请从文档中查看此示例:https://docs.djangoproject.com/en/dev/topics/class-based-views/generic-editing/#ajax-示例

有两种情况:表格是否有效。从那里我们有两种情况:请求是否基于AJAX(request.is_axx)