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)
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)
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)
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)
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)