后端+数据库(pycharm+mysql):使用 “flask”制作的调查量表/问卷

1. 功能和性能概要

 登录功能
 用户填写问卷
 反馈用户问卷结果
 浏览历史问卷数据

2.数据库设计

3.后端代码

下面展示一些 代码

# -*- coding: utf-8 -*-
import json
import pymysql
from flask import Flask, request, jsonify, render_template, app, redirect
from flask_cors import CORS

# 数据库连接
db = pymysql.connect("localhost", "root", "*****(个人数据库密码)", "ad(数据库名称)")
cursor = db.cursor()

# 后端服务启动
app = Flask(__name__, static_folder='static', static_url_path='/static')
cors = CORS(app, resources={r"/*": {"origins": "*"}})


# http server
@app.route("/")
def http_server():
    return redirect('/static/test5.html')


# 首页_注册
@app.route('/login', methods=['POST'])
def login_add():
    if request.method == "POST":
        username = request.form.get("username")
        try:
            cursor.execute("insert into login(username) values (\"'" + str(username) + "'\")")
            db.commit()  # 提交,使操作生效
            print("add a new user successfully!")
            return "1"
        except Exception as e:
            print("add a new user failed:", e)
            db.rollback()  # 发生错误就回滚
            return "-1"


# 首页_登录
@app.route('/login/login', methods=['POST'])
def login_login():
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
        cursor.execute("select id,username,role,ctime from login where username=\"'"
                       + str(username) + "'\" and password=\"'" + str(password) + "'\"")
        data = cursor.fetchone()
        if data is not None:
            print("result:", data)
            jsondata = {"id": str(data[0]), "username": str(data[1]),
                        "role": str(data[2]), "ctime": str(data[3])}
            return jsonify(jsondata)
        else:
            print("result: NULL")
            jsondata = {}
            return jsonify(jsondata)


# 展示空白问卷界面
@app.route('/login/questionnaire', methods=['GET'])
def questionnaire_list():
    cursor.execute("select Ques_type,Ques_title from subjects")
    questiondata = cursor.fetchall()
    subjects = {}
    midlisk = []
    for i in questiondata:
        subjects["Ques_type"] = i[0]
        subjects["subject"] = i[1]
        cursor.execute("select  Ans_type, Ans_title,val from  ops where Ques_type='" + str(i[0]) + "'")
        answerdata = cursor.fetchall()
        answers = {}
        littlelisk = []
        for a in answerdata:
            answers["Ans_type"] = a[0]
            answers["option"] = a[1]
            answers["fraction"] = a[2]
            littlelisk.append(answers.copy())
        subjects["options"] = littlelisk
        midlisk.append(subjects.copy())
    cursor.execute("select type,title from questionnaires")
    questionnairesdata = cursor.fetchall()
    dic3 = {}
    largelisk = []
    if questionnairesdata is not None:
        for k in questionnairesdata:
            dic3["type"] = k[0]
            dic3["name"] = k[1]
    dic3["list"] = midlisk
    largelisk.append(dic3.copy())
    return jsonify(largelisk)


# 用户填写答卷
@app.route('/login/questionnaire/add', methods=['POST'])
def questionnaire_add():
    questionnna = request.json
    user_name = questionnna["username"]
    user_arr = questionnna["arr"]
    cursor.execute("insert into login(username) values (\"" + str(user_name) + "\")")
    try:
        addnumber = 0
        for line in user_arr:
            answer1 = line["grade"]
            answer2 = line["answer"]
            # 求和
            addnumber += int(answer1)
            cursor.execute(
                "insert into answerplus(username,sub_ans,sub_number) values (\"" + str(user_name) + "\",\"" + str(answer2) + "\",\"" + str(answer1) + "\")")
        cursor.execute("update login set sumpoint="+str(addnumber)+" where username=\""+str(user_name)+"\"")
        db.commit()  # 提交,使操作生效
        print("add a new questionnaire!")
        return "1"
    except Exception as e:
        print("add a new user failed:", e)
        db.rollback()  # 发生错误就回滚
        return "-1"


# 展示个人用户填写结果
@app.route('/show', methods=['POST'])
def personshow_list():
    print(request.data)
    id1 = request.json
    #username = request.form.get("username")
    id = id1["userid"]
    cursor.execute("SELECT id, username, sumpoint FROM login WHERE id='" + str(id) + "'")
    data = cursor.fetchall()
    tem = {}
    result = []
    if data is not None:
        for i in data:
            tem["id"] = i[0]
            tem["username"] = i[1]
            tem["total"] = i[2]
            cursor.execute("select  sub_ans, sub_number from  answerplus where username='" + str(i[1] ) + "'")
            subdata = cursor.fetchall()
            sub = {}
            sublisk = []
            for a in subdata:
                sub["answer"] = a[0]
                sub["grade"] = a[1]
                if a[1] >= 3:
                    tem["littlest"] = "单项分≥3分,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
                else:
                    tem["littlest"] = "单项合格"
                sublisk.append(sub.copy())  # 特别注意要用copy,否则只是内存的引用
            tem["arr"] = sublisk
            if i[2] <= 5:
                tem["judge"] = "营养状况良好"
            elif i[2] <= 10:
                tem["judge"] = "存在营养不良风险,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
            elif i[2] <= 14:
                tem["judge"] = "轻度营养不良,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
            else:
                tem["judge"] = "重度营养不良,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
            result.append(tem.copy())
            print("result:", len(data))
            return jsonify(result)
        else:
            print("result: NULL")
            return jsonify([])


# 管理员汇总界面
@app.route('/login/master', methods=['GET'])
def master_show():
    cursor.execute("select id,username,sumpoint from login")
    data = cursor.fetchall()
    temp = {}
    result = []
    if data is not None:
        for i in data:
            temp["id"] = i[0]
            temp["username"] = i[1]
            temp["total"] = i[2]
            result.append(temp.copy())  # 特别注意要用copy,否则只是内存的引用
        print("result:", len(data))
        return jsonify(result)
    else:
        print("result: NULL")
        return jsonify([])


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

    print("Good bye!")

调试

postman

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值