def handle_ajax_method(self, request, method):
        """handle ajax methods and return serialized reponse
        in the default state allows only authentificated users

        - Depends on method parameter render whole region or single widget

        - If widget_id is present then try to load this widget
          and call method on them

        - If class_name is present then try to load class
          and then call static method on this class

        - If class_name is present then try to load class
          and if method_name == render_preview then
          render widget preview without instance

        """

        response = {}

        def get_param(request, name):

            try:
                return request.POST[name]
            except KeyError:
                return request.GET.get(name, None)

        widget_id = get_param(request, "widget_id")
        class_name = get_param(request, "class_name")

        if method in 'widget_content':
            return self.render_widget(request, widget_id)

        if method == 'region':
            return self.render_region(request)

        # handle methods called directly on widget
        if widget_id:

            widget = get_widget_from_id(widget_id)

            try:
                func = getattr(widget, method)
            except AttributeError:
                response["exception"] = "%s method is not implmented on %s" % (
                    method, widget)
            else:
                response["result"] = func(request)

        elif class_name:
            # handle calling classmethod without instance

            try:
                cls = get_model(*class_name.split('.'))
            except Exception as e:
                response["exception"] = str(e)
                return JsonResponse(data=response)

            if method == "render_preview":

                # TODO: i think that we need only simple form
                # for loading relations but maybe this would be need it
                # custom_form_cls = getattr(
                #     cls, 'feincms_item_editor_form', None)

                # if custom_form_cls:
                #     FormCls = modelform_factory(cls, form=custom_form_cls,
                #                                 exclude=('pk', 'id'))

                FormCls = modelform_factory(cls, exclude=('pk', 'id'))

                form = FormCls(request.POST)

                if form.is_valid():

                    widget = cls(**form.cleaned_data)

                    request.frontend_editing = False

                    try:
                        content = widget.render(**{'request': request})
                    except Exception as e:
                        response['result'] = widget.handle_exception(request, e)
                    else:
                        response['result'] = content

                    response['id'] = widget_id

                else:
                    response['result'] = form.errors
                    response['id'] = widget_id

            else:
                # standard method
                try:
                    func = getattr(cls, method)
                except Exception as e:
                    response["exception"] = str(e)
                else:
                    response["result"] = func(request)

        return JsonResponse(data=response)
def handle_ajax_method ( self , request , method ) : response = { } def get_param ( request , name ) : try : return request . POST [ name ] except KeyError : return request . GET . get ( name , None ) widget_id = get_param ( request , "widget_id" ) class_name = get_param ( request , "class_name" ) if method in 'widget_content' : return self . render_widget ( request , widget_id ) if method == 'region' : return self . render_region ( request ) if widget_id : widget = get_widget_from_id ( widget_id ) try : func = getattr ( widget , method ) except AttributeError : response [ "exception" ] = "%s method is not implmented on %s" % ( method , widget ) else : response [ "result" ] = func ( request ) elif class_name : try : cls = get_model ( * class_name . split ( '.' ) ) except Exception as e : response [ "exception" ] = str ( e ) return JsonResponse ( data = response ) if method == "render_preview" : FormCls = modelform_factory ( cls , exclude = ( 'pk' , 'id' ) ) form = FormCls ( request . POST ) if form . is_valid ( ) : widget = cls ( ** form . cleaned_data ) request . frontend_editing = False try : content = widget . render ( ** { 'request' : request } ) except Exception as e : response [ 'result' ] = widget . handle_exception ( request , e ) else : response [ 'result' ] = content response [ 'id' ] = widget_id else : response [ 'result' ] = form . errors response [ 'id' ] = widget_id else : try : func = getattr ( cls , method ) except Exception as e : response [ "exception" ] = str ( e ) else : response [ "result" ] = func ( request ) return JsonResponse ( data = response )
handle ajax methods and return serialized reponse
        in the default state allows only authentificated users

        - Depends on method parameter render whole region or single widget

        - If widget_id is present then try to load this widget
          and call method on them

        - If class_name is present then try to load class
          and then call static method on this class

        - If class_name is present then try to load class
          and if method_name == render_preview then
          render widget preview without instance