Exemplo n.º 1
0
 def to_view(cls, request):
     pk, name, permission_table = parse_api_url(request.path)
     if not permission(request, permission_table, 1):
         return forbidden_view()
     context = {}
     context['js_path'] = os.path.join(cls.js_path(cls), cls.default_view_js)
     context['request'] = request
     if permission(request, permission_table, 2):
         context['create_permission'] = True
     if permission(request, permission_table, 3):
         context['update_permission'] = True
     if permission(request, permission_table, 4):
         context['delete_permission'] = True
     context = cls.get_view_context(cls, context)
     return render(request, os.path.join(cls.templaters_path, cls.default_view), context)
Exemplo n.º 2
0
 def get_screen_data(cls, request):
     pk, name, permission_table = parse_extra_url(request.path)
     if not permission(request, permission_table, 1):
         return forbidden_view()
     data = {}
     data = cls.get_screen_context(cls, data)
     return JsonResponse(data)
Exemplo n.º 3
0
 def to_update_frame(cls, request, id):
     url_type, _ = parse_extra_url(request.path, retrieve=True)
     if not permission(request, url_type[2], 3):
         return forbidden_view()
     context = cls.choice_to_value(cls)
     data = cls.Model.objects.get(pk=id, df=0)
     context['data'] = data
     context['js_path'] = os.path.join(cls.js_path(cls), cls.default_updateframe_js)
     context['request'] = request
     context = cls.get_update_context(cls, context)
     return render(request, os.path.join(cls.templaters_path, cls.default_updateframe), context)
Exemplo n.º 4
0
 def to_create_frame(cls, request, id=None):
     pk, name, permission_table = parse_extra_url(request.path)
     if not permission(request, permission_table, 2):
         return forbidden_view()
     context = cls.choice_to_value(cls)
     tmpl_data = {}
     if id:
         try:
             # 有参照数据时,加载参照数据
             tmpl_data = cls.Model.objects.get(pk=id, df=0)
         except:
             tmpl_data = {}
     context['tmpl'] = tmpl_data
     context['js_path'] = os.path.join(cls.js_path(cls), cls.default_createframe_js)
     context['request'] = request
     context = cls.get_create_context(cls, context)
     return render(request, os.path.join(cls.templaters_path, cls.default_createframe), context)
Exemplo n.º 5
0
    def api_view(cls, request):
        pk, name, permission_table = parse_extra_url(request.path)
        if not permission(request, permission_table, 1):
            return forbidden_view()
        # 获取前端传过来的GET数据
        get_data = request.GET
        # 页码
        page = get_data.get(PAGE_FIELD_NAME) or 1
        # 每页数据
        page_size = get_data.get(PAGE_SIZE_FILED_NAME) or PAGE_SIZE
        # 搜索项
        search = get_data.get(SEARCH_FIELD_NAME)
        # 排序
        order = get_data.get(ORDER_FIELD_NAME) or 'id'
        # 分页

        # 获取数据
        query_set = cls.Model.objects.all()
        # 自定义筛选条件
        query_set = cls.view_queryset(cls, query_set)
        #   前端传过来的筛选条件
        screen_data = cls.get_screen_context(cls, {})
        # 应用的筛选项
        effective_screen = {}
        for screen_field in screen_data:
            if get_data.get(screen_field):
                effective_screen[screen_field] = get_data[screen_field]
        # 筛选数据
        if effective_screen:
            query_set = query_set.filter(**effective_screen)
        #     搜索数据
        if search:
            query_set = cls.view_search(cls, query_set)
        #     排序
        query_set = query_set.order_by(order)
        query_set = cls.view_return_queryset(cls, query_set)
        paginator = Paginator(query_set,page_size)
        return JsonResponse({
            'count':paginator.count(),
            'page:':page,
            'code':200,
            'data':paginator.page(page)
        }, safe=False)
Exemplo n.º 6
0
    def get_fields(cls, request, field):
        pk, name, permission_table = parse_extra_url(request.path)
        if not permission(request, permission_table, 1):
            return JsonResponse({'err': '无权操作'})
        cls.validate_fields(cls, request)
        field_dict = cls._model_fields(cls)
        fieldlist = field.split(',')
        many = False
        if len(fieldlist) > 1:
            many = True
        # 没有允许的字段
        if field not in cls.fields:
            for f in fieldlist:
                if f not in field_dict:
                    return JsonResponse({'err': '请求不允许', }, status=403)

        # 不存在的字段
        if field not in field_dict:
            for f in fieldlist:
                if f not in field_dict:
                    return JsonResponse({'err': '请求的字段不存在' + f}, status=403)
            where = request.GET  # 获取筛选项,即where条件
            data = get_screen_data(field, cls.Model._meta.db_table, where=where, many=True)
            return JsonResponse(data, safe=False)
        this_dict_field = field_dict[field]
        # dict字段
        if this_dict_field['choices']:
            return JsonResponse(choice_to_dict(this_dict_field['choices']))
        # 日期时间
        if this_dict_field['type'] == DateTimeField:
            return JsonResponse({'type': 'DateTimeField'})
        # 日期字段
        if this_dict_field['type'] == DateField:
            return JsonResponse({'type': 'DateField'})
        where = request.GET  # 获取筛选项,即where条件
        for key, value in where.items():
            print(key, value)
        data = get_screen_data(this_dict_field['column'], cls.Model._meta.db_table, where=where)
        return JsonResponse(data, safe=False)