From 97a3b7b7bfae08bd2bc773d84bb3ebce74c0b7f1 Mon Sep 17 00:00:00 2001 From: mxr612 Date: Tue, 4 Mar 2025 19:29:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8Flask=E5=92=8CPyScript?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=BA=86=E4=B8=80=E4=B8=AA=E7=AE=80=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E9=87=8F=E8=A1=A8=E7=BD=91=E7=AB=99=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BA=86=EF=BC=9A=201.=20=E7=BA=AFj?= =?UTF-8?q?son=E7=9A=84=E9=87=8F=E8=A1=A8=E7=BC=96=E8=BE=91=202.=20?= =?UTF-8?q?=E4=BB=BB=E6=84=8F=E5=8C=BA=E9=97=B4=E7=9A=84Ratio=E5=A1=AB?= =?UTF-8?q?=E5=86=99=203.=20=E5=8F=AF=E9=80=89=E7=9A=84Reverse=20item=204.?= =?UTF-8?q?=20=E5=8F=AF=E6=8C=89=E7=85=A7=E5=AD=90=E9=87=8F=E8=A1=A8?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 60 ++++++++++++++++++++++++++++++++++++++++++ requirements.txt | Bin 0 -> 1458 bytes templates/index.html | 16 +++++++++++ templates/result.html | 17 ++++++++++++ templates/scale.html | 48 +++++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 app.py create mode 100644 requirements.txt create mode 100644 templates/index.html create mode 100644 templates/result.html create mode 100644 templates/scale.html diff --git a/app.py b/app.py new file mode 100644 index 0000000..065f5fe --- /dev/null +++ b/app.py @@ -0,0 +1,60 @@ +import json +import os +from flask import Flask, render_template, request + +app = Flask(__name__) + +# 加载所有问卷数据 +def load_all_scales(): + scale_folder = 'scales' + scales = {} + for filename in os.listdir(scale_folder): + if filename.endswith('.json'): + with open(os.path.join(scale_folder, filename), 'r', encoding='utf-8') as f: + scale = json.load(f) + # 使用文件名作为问卷的唯一标识 + scale_id = os.path.splitext(filename)[0] + scales[scale_id] = scale + return scales + +@app.route('/') +def index(): + scales = load_all_scales() + return render_template('index.html', scales=scales) + +@app.route('/scales/') +def scale(scale_id): + scales = load_all_scales() + scale = scales.get(scale_id) + if scale: + return render_template('scale.html', scale_id=scale_id,scale=scale) + return "问卷未找到", 404 + +@app.route('/result/', methods=['POST']) +def result(scale_id): + # print(request.form) + scales = load_all_scales() + scale = scales.get(scale_id) + if scale: + responses = {} + ranges = {} + # print(scale['questions']) + for question in scale['questions']: + # print(question['subscale']) + if question['subscale'] not in responses: + responses[question['subscale']] = 0 + ranges[question['subscale']] = [0,0] + if 'reverse' in question and question['reverse']: + responses[question['subscale']] += question['range'][1] + question['range'][0] - int( request.form[question['id']]) + else: + responses[question['subscale']] += int( request.form[question['id']]) + ranges[question['subscale']][0] += question['range'][0] + ranges[question['subscale']][1] += question['range'][1] + # 这里可以添加保存数据到数据库等逻辑 + # print(ranges) + return render_template('result.html', responses=responses, ranges=ranges, scale_title=scale['title']) + return "问卷未找到", 404 + + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..19f4cff4faa7cc79a73547707dcd92134fa07f37 GIT binary patch literal 1458 zcmZ9M&2HO3421VwppT*;w$mg%^x8v#o_gppkR3TzYDvWawxUbX4^Z~C1YfXe~H~iOa+me_v?TN3` zn)eojmUo9w_MW9V{)@m`;!%V5i?}{KX4vkz=V4#Pf1}l5pTjf{MrCv}dTn6s;i_OR zqMAPK_$TzY6ZRr_Cu~_)a4R!$iu-OvY>92bECVO2ph|B~9=mrsDPA7;;o)2k#Bb4} z=2@L8l&2M2!!UqTqLC|<+A}VxGz+A!#LCN=stWm7!A#qZ8&;#VWb`98e&cnBqgnyb=&WaZBlDFRvh?d^1x(jn{Ap`0es-FNKUh?{pV z*Loy>^~w{Q`=psw9m?kg9-SYWww&7{bobm2#GZHgmQ2h%prf#b?lUH + + + + + 心尺 PsychoScales + + +

心尺 PsychoScales

+ + + \ No newline at end of file diff --git a/templates/result.html b/templates/result.html new file mode 100644 index 0000000..9b7160c --- /dev/null +++ b/templates/result.html @@ -0,0 +1,17 @@ + + + + + + Result + + +

{{ scale_title }}

+ +
    + {% for key, value in responses.items() %} +
  • {{ key }}: 在 {{ranges[key][0]}} 到 {{ranges[key][1]}} 的量表中得分 {{ value }}
  • + {% endfor %} +
+ + \ No newline at end of file diff --git a/templates/scale.html b/templates/scale.html new file mode 100644 index 0000000..32f13bc --- /dev/null +++ b/templates/scale.html @@ -0,0 +1,48 @@ + + + + + + {{ scale.title }} + + + +

{{ scale.title }}

+

{{ scale.instructions }}

+
+ {% for question in scale.questions %} + +
+ + {% for option in range(question.range[0], question.range[1]+1) %} + + + {% endfor %} +
+ {% endfor %} + +
+ + \ No newline at end of file