Gointerface接口声明实现及作用详解
231
2022-09-06
flask之活动多开模块【包头市政府活动网站开发】
@[toc]
一,前言
头痛的项目,架构的原因,现在实现功能非常的困难,想了很多的招,连续俩天从早上肝到半夜。目前实现的需求:1,活动需要手动定为历史活动,不要按照年份自动变为历史活动。【今天已经把这部分搞定了】2,同时多个活动开展上传这个活动二,头痛呀,绞尽脑汁想出了一种解决办法,最近正在写。
今天文章笔记,记录目前的进度。
二,需求解决思路逻辑
2021|包头市第二界文化旅游创意作品大赛|2
解释:
2021:赛事标识 包头市第二界文化旅游创意作品大赛:赛事名称 2:目标赛事设置(1:不设置为历史历史赛事 2:设置为历史历史赛事)
我根据dbm数据库的特性,琢磨了一套多开的开发思路。如下:我不断的累加他们,然后,如果需要到2022的标识比赛,我在后端处理字符串,遍历到下标的值,再把|分割开的文字目标提取处理,返回前端,传入index的id。实现进入不同的活动。至于作品,作品的显示,我写了一个目标match,赛选数据库的目标match,前端逐一的显示作品详情。
三,后端部分实现原理详解
上传大赛封面部分:
if value not in db_config["past_matchs"].decode():
上述代码解释:如果是新开的赛事标识的话。执行上传到腾讯云cos存储桶的操作逻辑实现:前端上传,返回目标图片地址,传递给后端,后端处理存储到dbm数据库【累加的形式】。
if(picture==''): flash("请上传大赛的封面图片") return redirect(url_for('config_set')) else: db_config["match_url"] = db_config["match_url"].decode( )+f"|{request.form.get('picture')}"
四,前端请求存储桶,返回目标url
部分代码块如下:
{% block footer %} {% include 'includes/_editor_foot.html' %} {% endblock footer %}
引入继承模板。
4.1,响应慢bug发现与解决
五,后端读取目标dbm显示到主页
past_url = db_config["match_url"].decode().split('|')
上述代码解释:已|为标识。把现在的字符串分割开,成为一个列表。
past_matchs = db_config["past_matchs"].decode().split(',') flag=1 for match_tuple in past_matchs: if not match_tuple: continue match_mark = match_tuple.split("|")[0] match_name1=match_tuple.split("|")[1] if(match==match_mark): break flag=flag+1
上述代码块解释:我写了应该粗糙的算法。past_matchs有,为分隔符,转换为一个类别,我们遍历他,再把每一个遍历的列表对象,用|分割,获取到列表下标为0,是比赛的字符串。写一个判断,如果获取的获取到列表下标为0的比赛的字符串和目前比赛的标识相等的话,停止循环,否则flag加一。这样就拿到了目标的比赛图片封面url。
match_url=match_url,
上述代码解释:把目标url传递个前端。
六,前端得到响应,显示比赛封面
上述代码解释;得到响应,显示后端传来的目标图片url。
七,阶段性效果展示
八,附源码
@min_role_required(ROLES["mod"]) @app.route('/config_set/', methods=['GET', 'POST']) def config_set(): if request.method == "POST": picture = request.form.get("picture") print("上传的图片地址为:",picture) # db_config["past_matchs"]="" for key, value in request.form.items(): # print("标记key",key) # print("标记value",value) if key == "match": if "past_matchs" in db_config: if value not in db_config["past_matchs"].decode(): #flash("已经提交过相同的赛事,将不会出现在过去的比赛回顾中","danger") # return redirect(url_for('config_set')) db_config["past_matchs"] = db_config["past_matchs"].decode( )+f",{value}|{request.form.get('match_name')}|{request.form.get('switch')}" if(picture==''): flash("请上传大赛的封面图片") return redirect(url_for('config_set')) else: db_config["match_url"] = db_config["match_url"].decode( )+f"|{request.form.get('picture')}" else: db_config["past_matchs"] = f"{value}|{request.form.get('match_name')}|{request.form.get('switch')}" if key == "time": if value == "2": datas = get_score_datas(1) for data in datas[:int(db_config["time_2_posts"])]: Post.query.filter_by(id=data["id"]).first().time = 2 elif value == "3": datas = get_score_datas(2) for data in datas[:int(db_config["time_3_posts"])]: Post.query.filter_by(id=data["id"]).first().time = 3 elif int(value) > 3: flash("不能超过三轮", "danger") return "打分不能超过三轮" if key not in db_config or value != db_config[key].decode(): db_config[key] = value db.session.commit() flash("提交成功", "success") return redirect(url_for('config_set')) attrs_dict = {} for k in db_config.keys(): attrs_dict[k.decode()] = db_config[k].decode() print(attrs_dict) return render_template('admin/config_set.html', **attrs_dict)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~