def reptile_list(): request_id = request.args.get('request_id') if request_id: request_id = int(request_id) if request.args.get('page'): page = int(request.args.get('page')) else: page = 1 request_data = Crud.get_data(ReptileRequest, ReptileRequest.create_time.desc()) if request_id: page_data = Crud.search_data_paginate( ReptileList, ReptileList.request_id == request_id, ReptileList.create_time.desc(), page, 20) else: page_data = Crud.get_data_paginate(ReptileList, ReptileList.create_time.desc(), page, 20) category_data = Crud.get_data(Category, Category.sort.desc()) category_tree = build_tree(category_data, 0, 0) return render_template("admin/reptile/reptile_list.html", request_data=request_data, page_data=page_data, category_tree=category_tree, request_id=request_id)
def ad_list(space_id=None): sapce_data= Crud.get_data(Adspace) if space_id == None: ad_data = Crud.get_data(Ad,Ad.sort.desc()) else: ad_data = Crud.search_data(Ad,Ad.space_id == space_id,Ad.sort.desc()) return render_template("admin/ad/ad_list.html", space_id=space_id,ad_data=ad_data,sapce_data=sapce_data)
def searchData(cate_id, tag_id, search, page): ''' 数据查询 ''' cate_select, tag_select = '', '' if cate_id: cate_select = 'AND b.category_id=%d' % (cate_id) if tag_id: tag_select = 'AND r.tag_id=%d' % (tag_id) sql = '''select SQL_CALC_FOUND_ROWS b.* ,c.type,GROUP_CONCAT(r.tag_id SEPARATOR ',') as tags ,c.pid as cate_pid FROM (select p.id,p.title,p.cover,p.info,p.content,p.click,p.category_id,p.create_time,p.sort,p.is_del from product as p union all select a.id,a.title,a.cover,a.info,a.content,a.click,a.category_id,a.create_time,a.sort,a.is_del from article as a) as b left join tag_relation as r on b.id = r.relation_id left join category as c on c.id = b.category_id WHERE (b.title LIKE '%{0}%' OR b.content LIKE '%{0}%' OR b.info LIKE '%{0}%' ) {1} {2} GROUP BY b.id ORDER BY b.sort DESC LIMIT {3},{4}; '''.format(search, tag_select, cate_select, (page - 1) * 8, 8) sql_data = Crud.auto_select(sql) count_num = Crud.auto_select("SELECT FOUND_ROWS() as countnum") count = int((count_num.first()).countnum) if sql_data: return Pagination(page, 8, count, sql_data.fetchall()) return False
def op_log(reason): operation_log = Operationlog( admin_id=current_user.id, ip=request.remote_addr, reason=reason ) Crud.easy_add(operation_log)
def article(nav_id=None, id=None): rule = str(request.path) if id == None or nav_id == None: return redirect(url_for('home.index')) #如果在详情页搜索 if ('search' in request.args) and (request.args['search']): search = request.args['search'] return redirect(url_for('home.articles', nav_id=nav_id, search=search)) #获取产品的详细信息 article_detail = Crud.get_data_by_id(Article, id) #如果点击量为None,赋值0 if not article_detail.click: article_detail.click = 0 #如果有缓存的点击量,更新点击量 if rule in CLICKS_COUNT: article_detail.click = int(article_detail.click) + int( CLICKS_COUNT[rule]) else: article_detail.click = int(article_detail.click) + 1 Crud.easy_update(article_detail) # 如果进行了非法操作 if article_detail.column_id != nav_id: return redirect(url_for('home.index')) #获取标签作为关键词 keywords = ','.join([v.name for v in article_detail.tags]) #SEO信息 seo_data.keywords = keywords seo_data.description = article_detail.description seo_data.title = article_detail.title return render_template( "home/article.html", article_data=article_detail, seo_data=seo_data, )
def tpl_extra(): menu_data = Crud.get_data(Menu, Menu.sort.desc()) rule = str(request.url_rule) #用户权限列表 auth_urls = [] if hasattr(current_user, 'id') and current_user.id != 1: auth_urls = session.get('auth_urls') # 如果有分页,去掉分页标签 has_pagination = rule.find("<") if has_pagination>0: rule = rule[0:has_pagination-1] #获取当前菜单信息,用于页面展示 active_menu = Menu.query.filter(Menu.url == rule).first() #配置项 conf_model_data = Crud.get_data(Conf, Conf.sort.desc()) conf_data,webconfig = [],{} for v in conf_model_data: conf = object_to_dict(v) if conf['optional_values']: conf['optional_values'] = (conf['optional_values']).split(',') conf_data.append(conf) webconfig[conf['ename']] = conf['default_value'] data = dict( online_time= datetime.now().strftime("%Y/%m/%d %H:%M:%S"), menu_tree=build_tree(menu_data, 0, 0), rule = rule, active_menu = active_menu, conf_data = conf_data, webconfig = webconfig, auth_urls = auth_urls ) return data
def article_list(): category_id = None page = 1 search = '' if request.args.get('category_id'): category_id = int(request.args.get('category_id')) if request.args.get('page'): page = int(request.args.get('page')) if request.args.get('search'): search = request.args.get('search') #产品可用标签 tag_data = Crud.get_data(Tag) #栏目树 category_data = Crud.get_data(Category, Category.sort.desc()) category_tree = build_tree(category_data, 0, 0) #产品栏目 article_category = [v for v in category_tree if v['type'] == 2 or v['type'] == 3 ] if category_id == None: article_data = Crud.search_data_paginate(Article,Article.title.like("%" + search + "%"),Article.sort.desc(),page,10) else: article_data = Crud.search_data_paginate(Article,and_(Article.category_id == category_id,Article.title.like("%" + search + "%")),Article.sort.desc(),page,10) return render_template("admin/article/article_list.html", category_id=category_id, article_data=article_data, article_category = article_category, tag_data = tag_data, )
def post(self): ''' 角色授权 ''' args = parse_rules.parse_args() id = args.get('id') if not id: abort(RET.BadRequest, msg='请勿非法操作') sing_data = getSingData(id) rules = json.loads(args.get('rules')) # 清空原来的rules old_data = RoleRule.query.filter_by(role_id=id).all() if old_data: Crud.clean_all(old_data) #没有设置任何权限点就清空后返回 if not rules: return {'status': RET.OK, 'msg': '权限设置成功'} # 新增新的权限 relation_data = [ RoleRule(role_id=sing_data.id, rule_id=v) for v in rules ] if Crud.add_all(relation_data): sing_data.last_editor = g.admin.username sing_data.updata() return {'status': RET.OK, 'msg': '权限设置成功'} abort(RET.BadRequest, msg='权限设置失败,请重试...')
def auth_list(menuid=None): if menuid == None: auth_data = Crud.get_data(Auth) else: auth_data = Crud.search_data(Auth, Auth.menu_id == menuid) return render_template("admin/auth/auth_list.html", menuid=menuid, auth_data=auth_data)
def reptile_get(): getdata = request.args reptile_request = Crud.get_data_by_id(ReptileRequest, getdata['id']) urls = [] #处理为数组,接受多页查询 if reptile_request.begin_page and reptile_request.end_page: #有起止页面 urls = [ reptile_request.url.replace("{}", str(v)) for v in range(int(reptile_request.begin_page), int(reptile_request.end_page) + 1) ] else: urls.append(reptile_request.url) content_obj = { 'content_name': reptile_request.content_name, 'content_info': reptile_request.content_info, 'content_main': reptile_request.content_main, 'content_img': reptile_request.content_img, } page_list, number = [], 0 for url in urls: page_list.extend(getReptileList(url, reptile_request.dom)) for content_url in page_list: number += 1 print('-' * 40 + '开始爬第%d/%d个数据(%s)' % (number, len(page_list), content_url) + '-' * 40) #如果url已经被爬过了,跳过 count = ReptileList.query.filter( ReptileList.is_del == 0, getattr(ReptileList, 'url') == content_url).count() if count > 0: print('-' * 40 + '该数据已经被拿下' + '-' * 40) continue content = getReptileContent(content_url, content_obj) #如果没有取到数据 if 'content_name' not in content.keys( ) or 'content_main' not in content.keys(): return #如果有图片,下载图片,替换url if 'content_img' in content.keys(): if content['content_img']: content['content_img'] = downImage( full_url(url, content['content_img'])) content['request_id'] = getdata['id'] content['url'] = content_url #匹配新增代码,因批量爬取可能会中断,采用采集一个存一个的方式 # reptile_obj = ReptileList( # request_id=getdata['id'], # url=content_url, # content_name=content['content_name'], # content_info=content.setdefault('content_info', ''), # content_main=content['content_main'], # content_img=content.setdefault('content_img', ''), # ) Crud.add(ReptileList, content, 'url') print('-' * 40 + '第%d个数据已爬取成功' % (number) + '-' * 40) if number > 0: return {"code": 1, "msg": "已成功爬取" + str(number) + "个数据!"} return {"code": 0, "msg": "数据不存在或已经被爬过啦!"}
def interface(model_name=None): data = {} if model_name =='category': category_data = Crud.get_data(Category,Category.sort.desc()) data = build_tree(category_data, 0, 0) elif model_name == 'adspace': adspace_data = Crud.get_data(Adspace,Adspace.create_time.desc()) data = [ object_to_dict(v) for v in adspace_data] return jsonify(data)
def admin_reset(): getdata = request.args data = Crud.get_data_by_id(Admin, getdata['id']) data.password = "******" result = Crud.easy_update(data) if result: op_log("重置密码") return {"code": 1, "msg": "重置密码成功!"} return {"code": 0, "msg": '重置失败,系统错误'}
def role_list(page=None): sql = ''' SELECT menu.name as menu_name,auth.id,auth.name FROM auth LEFT JOIN menu ON auth.menu_id = menu.id WHERE auth.is_del = 0 ORDER BY menu.sort DESC; ''' data = Crud.auto_select(sql) menu_auths = rows_by_date(data.fetchall(),'menu_name') page_data = Crud.get_data_paginate(Role, Role.create_time.asc(), page, 10) return render_template("admin/role/role_list.html",page_data = page_data,menu_auths = menu_auths)
def template_list(nav_id=None): data = Crud.get_data(Category, Category.sort.desc()) nav_tree = build_tree(data, 0, 0) if nav_id == None: template_data = Crud.get_data(Template, Template.sort.desc()) else: template_data = Crud.search_data(Template, Template.nav_id == nav_id, Template.sort.desc()) return render_template("admin/template/template_list.html", nav_tree=nav_tree, template_data=template_data, nav_id=nav_id)
def webconfig(): data = Crud.get_data(Conf, Conf.sort.desc()) if request.method == 'GET': return render_template("admin/conf/webconfig.html") elif request.method == 'POST': form_data = request.form for v in data: v.default_value = form_data[v.ename] result = Crud.easy_update(data) if result: op_log("修改配置") return {"code":1, "msg": '保存成功'} return {"code":0, "msg": '保存失败,系统错误'}
def menu_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Menu, getdata['id']) return jsonify({"code": 1, "data": object_to_dict(data)}) elif request.method == "PUT": data = request.form form = MenuForm(data) if form.validate(): result = Crud.update(Menu, data, 'name') if result: op_log("修改菜单#%s" % data["id"]) return {"code": 1, "msg": "修改成功!"} return {"code": 0, "msg": "修改失败,系统错误或菜单已存在"} return {"code": 0, "msg": form.get_errors()}
def reptile_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(ReptileRequest, getdata['id']) return jsonify({"code": 1, "data": object_to_dict(data)}) elif request.method == "PUT": data = request.form form = ReptileForm(data) if form.validate(): result = Crud.update(ReptileRequest, data, "name") if result: op_log("修改爬虫任务#%s" % data["id"]) return {"code": 1, "msg": '修改成功'} return {"code": 0, "msg": '修改失败,系统错误或名称已存在'} return {"code": 0, "msg": form.get_errors()}
def auth_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Auth, getdata["id"]) return {"code": 1, "data": object_to_dict(data)} elif request.method == "PUT": data = request.form form = AuthForm(data) if form.validate(): result = Crud.update(Auth, data, 'name') if result: op_log("修改权限 #%s" % data["id"]) return {"code": 1, "msg": '修改成功'} return {"code": 0, "msg": '修改失败,系统错误或名称重复'} return {"code": 0, "msg": form.get_errors()}
def adspace_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Adspace, getdata['id']) return {"code": 1, "data": object_to_dict(data)} elif request.method == "PUT": data = request.form form = AdspaceForm(data) if form.validate(): result = Crud.update(Adspace,data,"name") if result: op_log("修改广告位#%s" % data["id"]) return {"code": 1, "msg": '修改成功'} return {"code": 0, "msg": '修改失败,系统错误或名称已存在'} return {"code": 0, "msg": form.get_errors()}
def _permission(): admin = g.admin if not admin: abort(RET.NotFound, msg='请登录后访问') # 是否有权限 if admin.is_super == 0: # 获取权限列表 method = request.method path = request.path sql = ''' SELECT CONCAT(r.url,':',r.method) as 'request', r.* FROM admin as a left join admin_role as ar on a.id = ar.admin_id left join role_rule as rr on rr.role_id = ar.role_id left join rule as r on r.id = rr.rule_id WHERE a.is_del = 0 AND a.id = %s ''' % admin.id sql_data = Crud.auto_select(sql) fetchall_data = sql_data.fetchall() rules = list(set([v.request for v in fetchall_data])) # 当前用户的菜单和权限 g.menus = list(set([v.menu_id for v in fetchall_data])) g.auth = fetchall_data if (path + ':' + method) not in rules: abort(RET.Forbidden, msg='您的权限不足,请联系管理员')
def conf_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Conf, getdata['id']) conf_data = object_to_dict(data) return jsonify({"code": 1, "data":conf_data}) elif request.method == "PUT": data = request.form form = ConfForm(data) if form.validate(): result = Crud.update(Conf,data,"ename") if result: op_log("修改配置项#%s" % data["id"]) return {"code":1, "msg": '修改成功'} return {"code":0, "msg": '修改失败,系统错误或调用名已存在'} return {"code": 0, "msg": form.get_errors()}
def article_del(): deldata = request.form data = Article.query.filter_by(id=deldata['id']).first_or_404() result = Crud.delete(data) if result: op_log("删除文章-%s" % data.title) return {"code": 1, "msg": '删除成功'} return {"code": 0, "msg": '删除失败'}
def tag_del(): deldata = request.form data = Tag.query.filter_by(id=deldata['id']).first_or_404() result = Crud.delete(data) if result: op_log("删除标签-%s" % data.name) return {"code": 1, "msg": '删除成功'} return {"code": 0, "msg": '删除失败,请重试'}
def admin_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Admin, getdata['id']) return { "code": 1, "id": data.id, "role_id": data.role_id, "username": data.username } elif request.method == "PUT": data = request.form result = Crud.update(Admin, data) if result: op_log("修改管理员角色#%s" % data["id"]) return {"code": 1, "msg": '修改成功'} return {"code": 0, "msg": '修改失败,系统错误或管理员已存在'}
def auth_del(): deldata = request.form data = Auth.query.filter_by(id=deldata['id']).first_or_404() result = Crud.delete(data) if result: op_log("删除权限-%s" % data.name) return {"code": 1, "msg": '删除成功'} return {"code": 0, "msg": '删除失败,系统错误'}
def reptile_data_del(): deldata = request.form data = ReptileList.query.filter_by(id=deldata['id']).first_or_404() result = Crud.delete(data) if result: op_log("删除爬虫数据-%s" % data.content_name) return {"code": 1, "data": '删除成功'} return {"code": 0, "data": '删除失败'}
def role_del(): delData = request.form if int(delData['id']) == 1: return jsonify({"code": 2, "msg": "超级管理员不能删除!"}) data = Role.query.filter_by(id=delData['id']).first_or_404() result = Crud.delete(data) op_log("删除角色-%s" % data.name) return jsonify(result)
def article_edit(): if request.method == 'GET': getdata = request.args data = Crud.get_data_by_id(Article, getdata["id"]) article_data = object_to_dict(data) #替换掉产品数据里面的TAGS tags = Crud.search_data(TagRelation,and_(TagRelation.relation_id==getdata["id"] , TagRelation.tag_type == 2),'create_time') if tags: article_data['tags'] = [v.tag_id for v in tags] return {"code": 1, "data": article_data} elif request.method == "PUT": data = request.form form = ArticleForm(data) if form.validate(): #移除已保存的tag tags = Crud.search_data(TagRelation,and_(TagRelation.relation_id==data["id"] , TagRelation.tag_type == 2),'create_time') if tags: del_tags = Crud.clean_all(tags) #保存修改后的信息 result = Crud.update(Article,data) # 如果有标签信息,根据产品的id和标签ID保存关联的标签数据 if data['tags']: tags = data['tags'].split(',') tag_data = [TagRelation( tag_type = 2, relation_id = data["id"], tag_id =v ) for v in tags] Crud.add_all(tag_data) if result: op_log("修改文章 #%s" % data["id"]) return {"code": 1, "msg": '修改成功'} return {"code": 0, "msg": '修改失败,系统错误'} return {"code": 0, "msg": form.get_errors()}
def getWebConfig(): ''' 获取站点配置信息 ''' webconfig = {} conf_model_data = Crud.get_data(Conf, Conf.sort.desc()) for v in conf_model_data: webconfig[v.ename] = v.default_value return webconfig
def delete(self): ''' 删除 ''' args = parse_id.parse_args() id = args.get('id') if not id: abort(RET.BadRequest, msg='请勿非法操作') sing_data = getSingData(id) sing_data.last_editor = g.admin.username result = sing_data.delete() # 清空原来的授权 _auth = RoleRule.query.filter_by(role_id=id).all() if _auth: Crud.clean_all(_auth) if result: return {'status': RET.OK, 'msg': '删除成功'} abort(RET.BadRequest, msg='删除失败,请重试')