예제 #1
0
def get_form_(request,app_label, model_name, op_name):
    '''
    根据 op_name 得到 表单视图 2
    '''
    ############## 根据 HTTP_REFERER 来判断是否是 从worktable页链接而 ######################
    is_worktable=""
    if request.META.has_key('HTTP_REFERER'):    #---Referer:从哪个页面链接过来的
        is_worktable=request.META['HTTP_REFERER']    
    if is_worktable.find("worktable")!=-1:
        is_worktable=True
    else:
        is_worktable=False
    ############## 得到操作的模型, 及ModelOperation 对象 op_name###############    
    model=GetModel(app_label, model_name)
    if not model: return NoFound404Response(request)
    if not hasattr(model, op_name): return NoFound404Response(request)
    op=getattr(model, op_name)
    if not (type(op)==types.TypeType and issubclass(op, ModelOperation)):
            return NoFound404Response(request)
    ############## 当前用户操作权限的判断###############    
    if op_name.startswith("_"):
        opn= op_name[1:]
    else:
        opn=op_name
    if model.__name__=="Group":
        opn="groupdel"        
    if not data_utils.hasPerm(request.user, model, opn.lower()):
        return HttpResponse("session_fail_or_no_permission")
    ############## 操作表单提交的处理和生成操作页的处理###############
    if request.method=='POST':
        if issubclass(model,Model) and not issubclass(model,CachingModel):
            keys=request.REQUEST.getlist("K")
            ret=[]
            objs=model.objects.filter(pk__in=keys)
            try:
                op_class=op
                for obj in objs:
                    if len(op_class.params)==0:
                        op=op_class(obj)
                        ret.append("%s"%(op.action(**{}) or ""))
                        msg=u"%s(%s) %s"%(op.verbose_name, "", ret or "")
                        LogEntry.objects.log_action_other(request.user.pk,  obj , msg)
            except Exception, e:
                  ret.append(u"%s"%e)
            if not "".join(ret):
                return HttpResponse('{ Info:"OK" }')
            else:
                return HttpResponse('<ul class="errorlist"><li>%s </li></ul>'%("".join(ret)))
        else:
            try:
                ret=model.model_do_action(op_name, request, form_field=form_field)  #-----------------关键点
                if not ret: return HttpResponse('{ Info:"OK" }')    # 操作处理结束 返回结果到前端
                if isinstance(ret, HttpResponse): return ret
                if isinstance(ret, forms.Form):
                    f=ret
                else:
                    return HttpResponse(u"{ errorCode:-1,\nerrorInfo:\"%s\" }"%ret)
            except Exception, e:
                return HttpResponse(u"{ errorCode:-1,\nerrorInfo:\"%s\" }"%e)
예제 #2
0
def get_form_(request, app_label, model_name, op_name):
    '''
    根据 op_name 得到 表单视图 2
    '''
    ############## 根据 HTTP_REFERER 来判断是否是 从worktable页链接而 ######################
    is_worktable = ""
    if request.META.has_key('HTTP_REFERER'):  #---Referer:从哪个页面链接过来的
        is_worktable = request.META['HTTP_REFERER']
    if is_worktable.find("worktable") != -1:
        is_worktable = True
    else:
        is_worktable = False
    ############## 得到操作的模型, 及ModelOperation 对象 op_name###############
    model = GetModel(app_label, model_name)
    if not model: return NoFound404Response(request)
    if not hasattr(model, op_name): return NoFound404Response(request)
    op = getattr(model, op_name)
    if not (type(op) == types.TypeType and issubclass(op, ModelOperation)):
        return NoFound404Response(request)
    ############## 当前用户操作权限的判断###############
    if op_name.startswith("_"):
        opn = op_name[1:]
    else:
        opn = op_name
    if model.__name__ == "Group":
        opn = "groupdel"
    if not data_utils.hasPerm(request.user, model, opn.lower()):
        return HttpResponse("session_fail_or_no_permission")
    ############## 操作表单提交的处理和生成操作页的处理###############
    if request.method == 'POST':
        if issubclass(model, Model) and not issubclass(model, CachingModel):
            keys = request.REQUEST.getlist("K")
            ret = []
            objs = model.objects.filter(pk__in=keys)
            try:
                op_class = op
                for obj in objs:
                    if len(op_class.params) == 0:
                        op = op_class(obj)
                        ret.append("%s" % (op.action(**{}) or ""))
                        msg = u"%s(%s) %s" % (op.verbose_name, "", ret or "")
                        LogEntry.objects.log_action_other(
                            request.user.pk, obj, msg)
            except Exception, e:
                ret.append(u"%s" % e)
            if not "".join(ret):
                return HttpResponse('{ Info:"OK" }')
            else:
                return HttpResponse('<ul class="errorlist"><li>%s </li></ul>' %
                                    ("".join(ret)))
        else:
            try:
                ret = model.model_do_action(
                    op_name, request,
                    form_field=form_field)  #-----------------关键点
                if not ret:
                    return HttpResponse('{ Info:"OK" }')  # 操作处理结束 返回结果到前端
                if isinstance(ret, HttpResponse): return ret
                if isinstance(ret, forms.Form):
                    f = ret
                else:
                    return HttpResponse(
                        u"{ errorCode:-1,\nerrorInfo:\"%s\" }" % ret)
            except Exception, e:
                return HttpResponse(u"{ errorCode:-1,\nerrorInfo:\"%s\" }" % e)