def content_action(request, response): # 二次确认提交才有此值 action_form_data = request.POST.get('__action_form_data') action_form_post = QueryDict( action_form_data) if action_form_data else request.POST # 判断批量选择数据是否合法 action_form = ActionForm(action_form_post) if not action_form.is_valid(): raise Alert(Alert.ERROR, action_form.errors) # 权限检查 has_perm(request, 'cms.action.%s' % action_form.cleaned_data.get('action')) # 选定数据检查 selected = action_form_post.getlist('pk') if not selected: raise Alert(Alert.ERROR, u'您没有勾选需要操作的内容') if len(selected) > CONTENT_ACTION_MAX_RESULTS: raise Alert(Alert.ERROR, u'超过最大选择条数: %d' % CONTENT_ACTION_MAX_RESULTS) # 为二次确认提交准备 if not action_form_data: action_form_data = action_form_post.urlencode() back = action_form.cleaned_data.get('back') Model = action_form.get_model_object() Form = action_form.get_form_object() action_name = action_form.get_action_name() content_set = Model.objects.filter(pk__in=selected).select_related( 'column', 'update_user') if request.POST.get('__confirm') == 'yes': form = Form(content_set, request.POST, request.FILES) if form.is_valid(): form.execute() msg = u'批量执行: ' + action_name log.success( request, u'%s\nID: %s\n表单数据: %s' % (msg, ','.join(selected), form.cleaned_data), form.log_action) messages.success(request, u'已完成' + msg) if back: return HttpResponseRedirect(back) return redirect('admin:cms:content') else: form = Form(content_set) return locals()
def recycle(request, response): content_set = ContentBase.objects.filter(is_deleted=True).select_related( 'path', 'update_user') if request.method == 'POST': action = request.POST.get('action') selected = request.POST.getlist('pk') if not selected: raise Alert(Alert.ERROR, u'您没有勾选需要操作的内容') if action == 'fire': has_perm(request, 'cms.recycle.fire') content_set.filter(pk__in=selected).delete() msg = u'回收站批量删除' log.success(request, u'%s\nID: %s' % (msg, ','.join(selected)), log.DELETE) messages.success(request, u'已完成' + msg) content_set = Paging(content_set, request, CONTENT_PER_PAGE).page() return locals()
def edit(request, response, key): item = get_config_item(key) if item is None: raise Alert(Alert.ERROR, u'不存在的配置项: %s' % key) verbose_name = (item[2].label if isinstance(item[2], Field) else item[2]) if len(item) > 2 else key value = get_config_value(key) form = ItemForm(item, request.POST or None, initial={'value': value}) if form.is_valid(): log_content = u'修改配置项: %s(%s)' % (verbose_name, key) log_content += u'\n\n原值: %r\n新值: %r' % (value, form.cleaned_data['value']) log(request, log.SUCCESS, log_content, view_name='admin:admin:config-edit', view_args=[key]) set_config_value(key, form.cleaned_data['value']) messages.success(request, u'成功修改配置项') return redirect('admin:admin:config') return locals()
def recycle(request, response, model=None): models = CONTENT_MODELS selected_model = models.get(model) # 无效的 model if model and selected_model is None: return redirect('admin:cms:recycle') if selected_model: Model = get_model_object(model, 'model') content_set = Model.objects.filter(is_deleted=True).select_related( 'column', 'update_user') if request.method == 'POST': action = request.POST.get('action') selected = request.POST.getlist('pk') if not selected: raise Alert(Alert.ERROR, u'您没有勾选需要操作的内容') if action == 'fire': has_perm(request, 'cms.recycle.fire') content_set.filter(pk__in=selected).delete() msg = u'回收站批量删除: ' + selected_model.get('name') log.success(request, u'%s\nID: %s' % (msg, ','.join(selected)), log.DELETE) messages.success(request, u'已完成' + msg) content_set = Paging(content_set, request, CONTENT_PER_PAGE).page() else: # 没有选择任何模型,则调用所有模型删除统计 stats = {} total_count = 0 for m, i in models.items(): M = get_model_object(m, 'model') if not M: break count = M.objects.filter(is_deleted=True).count() total_count += count stats[m] = {'name': i.get('name'), 'count': count} return locals()
def content_edit(request, response, column_select, content_id=None): user = get_request_user(request) is_content_edit = True column = column_select.selected Model = column.get_model_object('model') Form = column.get_model_object('form') if Model is None or Form is None: raise Alert(Alert.ERROR, '此栏目 %s 不可添加内容' % column) content = Model.objects.get(column=column, pk=content_id) if content_id else None model_log = ModelLogger(content) # 权限检查 if not content: has_perm(request, 'cms.content.create') elif content.create_user == user: has_perm(request, 'cms.content.update.self') else: has_perm(request, 'cms.content.update.other') # 删除操作 delete_id = request.GET.get('delete') if content and not content.is_deleted and content_id == delete_id: has_perm(request, 'cms.action.delete') update_instance(content, is_deleted=True) log.success(request, model_log.message(content), log.DELETE) messages.success(request, '删除内容: %s 成功' % str(content)) return redirect('admin:cms:content-path', column.path) # 删除恢复 recover_id = request.GET.get('recover') if content and content.is_deleted and content_id == recover_id: has_perm(request, 'cms.content.recover') update_instance(content, is_deleted=False) log.success(request, model_log.message(content), log.UPDATE) messages.success(request, '恢复删除内容: %s 成功' % str(content)) return redirect('admin:cms:content-path', column.path) if request.method == 'POST': form = Form(request.POST, request.FILES, instance=content) if form.is_valid(): form.instance.column = column form.instance.column_path = column.path form.instance.column_depth = column.depth if not form.instance.create_user: form.instance.create_user = user form.instance.update_user = user obj = form.save() log.success(request, model_log.message(obj), log.CREATE) messages.success(request, (content and '修改' or '创建') + '内容: ' + str(obj) + ' 成功') if request.GET.get('next'): return HttpResponseRedirect(request.GET.get('next')) return redirect('admin:cms:content-path', column.path) else: form = Form(instance=content) # 表单字段分离 main_fields = [] meta_fields = [] meta_fields_name = ['is_hidden'] _t = column.get_model_object('form_meta_fields') if _t: meta_fields_name.extend(_t) for i in form.visible_fields(): if i.name in meta_fields_name: meta_fields.append(i) else: main_fields.append(i) return 'content', locals()
def _content_edit(request, response, current_path=None, content_id=None): user = get_request_user(request) is_content_edit = True if content_id: content_base = ContentBase.objects.get(pk=content_id) Model = content_base.model_class Form = content_base.form_class path = content_base.path content = Model.objects.get(pk=content_id) current_path = get_current_path(path.path) elif current_path: path = current_path.selected Model = path.model_class Form = path.form_class content = None else: raise Alert(Alert.ERROR, u'缺少必要参数') if Form is None: raise Alert(Alert.ERROR, u'此栏目 %s 不可添加内容' % path) model_log = ModelLogger(content) # 权限检查 if not content: has_perm(request, 'cms.content.create') elif content.create_user == user: has_perm(request, 'cms.content.update.self') else: has_perm(request, 'cms.content.update.other') # 删除操作 delete_id = request.GET.get('delete') if content and not content.is_deleted and content_id == delete_id: has_perm(request, 'cms.action.delete') update_instance(content, is_deleted=True) log.success(request, model_log.message(content), log.DELETE) messages.success(request, u'删除内容: %s 成功' % unicode(content)) return redirect('admin:cms:content-path', path.path) # 删除恢复 recover_id = request.GET.get('recover') if content and content.is_deleted and content_id == recover_id: has_perm(request, 'cms.content.recover') update_instance(content, is_deleted=False) log.success(request, model_log.message(content), log.UPDATE) messages.success(request, u'恢复删除内容: %s 成功' % unicode(content)) return redirect('admin:cms:content-path', path.path) if request.method == 'POST': form = Form(request.POST, request.FILES, instance=content) if form.is_valid(): form.instance.path = path form.instance.path_value = path.path form.instance.path_depth = path.depth if not form.instance.model: form.instance.model = path.model if not form.instance.create_user: form.instance.create_user = user form.instance.update_user = user obj = form.save() log.success(request, model_log.message(obj), log.CREATE) messages.success(request, (content and u'修改' or u'创建') + u'内容: ' + unicode(obj) + u' 成功') if request.GET.get('next'): return HttpResponseRedirect(request.GET.get('next')) return redirect('admin:cms:content-path', path.path) else: form = Form(instance=content) # 表单字段分离 main_fields = [] meta_fields = [] meta_fields_name = ['flag', 'collections', 'is_hidden'] _t = path.model_config.get('form_meta_fields') if _t: meta_fields_name.extend(_t) for i in form.visible_fields(): if i.name in meta_fields_name: meta_fields.append(i) else: main_fields.append(i) return 'content_edit', locals()