Flask 简单GET/POST请求处理

通过使用Python中 Flask 框架实现一个简单的API接口程序,用户可发送JSON格式的请求,服务器响应相应的JSON格式给客户。

简单的登录接口调用: 最简单的Flask接收数据请求并处理的案例如下。

from flask import Flask, render_template, request, redirect
import json

app = Flask(__name__, template_folder="templates")

@app.route('/login', methods=['GET', 'POST'])
def login():
    return_dict = {'status': '0', 'key': 'none'}

    if request.method == 'GET':
        # 判断参数不为0
        if len(request.args) != 0:
            get_data = request.args.to_dict()
            username = get_data.get("username")
            password = get_data.get("password")
            print("GET => username = {} password = {}".format(username,password))

        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            username = request.values.get("username")
            password = request.values.get("password")

            print("username = {} => password = {}".format(username,password))

            if(username=="lyshark" and password == "123456"):
                return_dict["status"] = "1"
                return_dict["key"] = "1f3dsgf9834r98ugdf98gjd"
                return json.dumps(return_dict, ensure_ascii=False)

    return json.dumps(return_dict, ensure_ascii=False)

@app.route('/lat',methods=['GET', 'POST'])
def lat():
    return_dict = {'status': '0','x': 'none', 'y':'none'}

    if request.method == 'GET':
        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            key = request.values.get("key")
            tel = request.values.get("tel")

            print("key = {} => tel = {}".format(key,tel))

            if(key=="1f3dsgf9834r98ugdf98gjd"):
                return_dict["status"] = "1"
                return_dict['x'] = '12.5'
                return_dict['y'] = '22.4'

                return json.dumps(return_dict, ensure_ascii=False)

    return json.dumps(return_dict, ensure_ascii=False)

if __name__ == '__main__':
    app.run(port=80,debug=False)

实现简单的接口请求,首先创建数据库,增加两张表,一张用户表,一张计费表,初始化写入测试数据。

import sqlite3

# 增加用户表
def UserDB():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    create = "create table UserDB(" \
             "id int auto_increment primary key," \
             "username char(32) not null," \
             "password char(32) not null," \
             "key char(128) not null" \
             ")"

    cursor.execute(create)

    insert = "insert into UserDB(id,username,password,key) values(1,'lyshark','123456','1f3dsgf9834r98ug');"
    cursor.execute(insert)

    insert = "insert into UserDB(id,username,password,key) values(2,'admin','1233','cef45f9f8480gfi5');"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

# 增加计数表
def CountDB():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    create = "create table CountDB(" \
             "id int auto_increment primary key," \
             "username char(32) not null," \
             "key char(128) not null," \
             "lat_count int not null" \
             ")"

    cursor.execute(create)

    insert = "insert into CountDB(id,username,key,lat_count) values(1,'lyshark','1f3dsgf9834r98ug',0);"
    cursor.execute(insert)

    insert = "insert into CountDB(id,username,key,lat_count) values(2,'admin','cef45f9f8480gfi5',0);"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

UserDB()
CountDB()

'''
创建用户验证表
UserDB(id,username,password,key)

创建计数表
CountDB(id,key,lat_count,,,,,)
'''

增加测试接口: 定义并实现一些基本的功能,这些功能如下:

  • login 用户登录接口
  • is_login 判断用户是否登录
  • get_lat 模拟返回经纬度
  • get_count 获取调用次数
from flask import Flask, render_template, request, redirect
import json,sqlite3

# 手机号规则
TelList = ["130", "131", "132", "145", "155", "156", "175", "176", "185", "186", "166", "146", "10646"]

app = Flask(__name__, template_folder="templates")

def run_sql(sql):
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
    return cursor.fetchall()

# 用户登录
@app.route('/login', methods=['POST'])
def login():
    return_dict = {'status': '0', 'key': 'none'}

    if request.method == 'GET':
        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            username = request.values.get("username")
            password = request.values.get("password")

            # 验证账号密码是否正确
            ref_data = run_sql("select * from UserDB;")
            for data in ref_data:
                # 正确返回key
                if (data[1] == username) and (data[2] == password):
                    return_dict["status"] = "1"
                    return_dict["key"] = data[3]
                    return json.dumps(return_dict, ensure_ascii=False)
    return json.dumps(return_dict, ensure_ascii=False)

# 判断是否登录
@app.route('/is_login',methods=['POST'])
def is_login():
    return_dict = {'status': '0','user': 'none'}

    if request.method == 'GET':
        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            key = request.values.get("key")

            # 验证是否登录
            ref_data = run_sql("select * from UserDB;")
            for data in ref_data:
                if(data[3] == key):
                    return_dict['status'] = "1"
                    return_dict['user'] = data[1]
                    return json.dumps(return_dict, ensure_ascii=False)
    return json.dumps(return_dict, ensure_ascii=False)

# 模拟返回经纬度
@app.route('/get_lat',methods=['POST'])
def get_lat():
    return_dict = {'status': '0','mobile': 'none', 'longitude': 'none','latitude': 'none'}

    if request.method == 'GET':
        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            key = request.values.get("key")
            mobile = request.values.get("mobile")

            # 通过说明是联通的手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 验证是否登录
                ref_data = run_sql("select * from UserDB;")
                for data in ref_data:
                    if(data[3] == key):
                        return_dict['status'] = '1'
                        return_dict['mobile'] = mobile
                        return_dict['longitude'] = '172.43'
                        return_dict['latitude'] = '22.56'

                        # 定位次数+1
                        ref_data = run_sql("select lat_count from CountDB where key='{}';".format(key))
                        new_count = int(ref_data[0][0]) + 1
                        run_sql("update CountDB set lat_count={} where key='{}'".format(new_count,key))

                        return json.dumps(return_dict, ensure_ascii=False)

    return json.dumps(return_dict, ensure_ascii=False)

# 获取计数
@app.route('/get_count',methods=['POST'])
def get_count():
    return_dict = {'status': '0','lat_count': '0'}

    if request.method == 'GET':
        return json.dumps(return_dict, ensure_ascii=False)

    if request.method == "POST":
        if len(request.get_data()) != 0:
            key = request.values.get("key")

            # 查询统计次数
            ref_data = run_sql("select * from CountDB where key='{}';".format(key))
            return_dict['status'] = '1'
            return_dict['lat_count'] = str(ref_data[0][3])

    return json.dumps(return_dict, ensure_ascii=False)

if __name__ == '__main__':
    app.run(port=80,debug=False)

完善动态登录功能: 上方登录时Key是固定的,我们再次调整,实现每次用户登录Key都会自动变化一次,当用户不使用的时候直接登出处理。

首先创建数据库

import sqlite3

# 增加用户表
def UserDB():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    create = "create table UserDB(" \
             "id int auto_increment primary key," \
             "username char(32) not null," \
             "password char(32) not null," \
             "user_key char(128) not null," \
             "company char(256) not null," \
             "lat_count int not null" \
             ")"

    cursor.execute(create)

    insert = "insert into UserDB(id,username,password,user_key,company,lat_count) values(1,'lyshark','123456','1f3dsgf9834r98ug','联通数科',0);"
    cursor.execute(insert)

    insert = "insert into UserDB(id,username,password,user_key,company,lat_count) values(2,'admin','1233','cef45f9f8480gfi5','联通数科',0);"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

UserDB()

Flask框架完善登录登出功能,代码如下:

from flask import Flask, render_template, request, redirect
import json,sqlite3
import random,string

# 手机号规则
TelList = ["130", "131", "132", "145", "155", "156", "175", "176", "185", "186", "166", "146", "10646"]

app = Flask(__name__, template_folder="templates")

# 查询SQL
def select_sql(sql):
    try:
        conn = sqlite3.connect("database.db")
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        return cursor.fetchall()
    except Exception:
        return False

# 写出SQL
def update_sql(sql):
    try:
        conn = sqlite3.connect("database.db")
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 生成一个指定长度的随机字符串
def generate_random_str(randomlength=32):
    """
    string.digits=0123456789
    string.ascii_letters=abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    """
    str_list = [random.choice(string.digits + string.ascii_letters) for i in range(randomlength)]
    random_str = ''.join(str_list)
    return random_str

# ----------------------------------------------------------------------------------------------------------------------
# 登录 + 验证 + 登出
# ----------------------------------------------------------------------------------------------------------------------
# 用户登录
@app.route('/login', methods=['GET','POST','PUT','HEAD','DELETE'])
def login():
    return_dict = {'status': '0', 'key': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                username = request.values.get("username")
                password = request.values.get("password")

                # 验证账号密码是否正确
                ref_data = select_sql("select * from UserDB;")
                print(ref_data)

                # 当查询不为假则执行
                if ref_data != False:
                    for data in ref_data:
                        # 正确返回key
                        if (data[1] == username) and (data[2] == password):
                            # 生成并写入随机数
                            uuid = generate_random_str(32)
                            if update_sql("update UserDB set user_key='{}' where username='{}'".format(uuid, data[1])) != False:
                                return_dict["status"] = "1"
                                return_dict["key"] = uuid
                                return json.dumps(return_dict, ensure_ascii=False)
                            else:
                                return_dict["status"] = "0"
                                return_dict["key"] = "密钥更新失败"
                                return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["key"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["key"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict["status"] = "0"
            return_dict["key"] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["key"] = "用户名或密码错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 判断是否登录
@app.route('/is_login',methods=['GET','POST','PUT','HEAD','DELETE'])
def is_login():
    return_dict = {'status': '0','user': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("key")
                # 验证是否登录
                ref_data = select_sql("select * from UserDB;")
                if ref_data != False:
                    for data in ref_data:
                        if(data[3] == key):
                            return_dict['status'] = "1"
                            return_dict['user'] = data[1]
                            return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["key"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["user"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "0"
            return_dict['user'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["user"] = "密钥失效,请重新登录"
    return json.dumps(return_dict, ensure_ascii=False)

# 用户登出
@app.route('/logout',methods=['GET','POST','PUT','HEAD','DELETE'])
def logout():
    return_dict = {'status': '0','message': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("key")
                uuid = generate_random_str(32)

                # 用户登出
                if update_sql("update UserDB set user_key='{}' where user_key='{}'".format(uuid, key)) != False:
                    return_dict["status"] = "1"
                    return_dict["message"] = "已登出"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["message"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "1"
            return_dict['message'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未登录,请登陆"
    return json.dumps(return_dict, ensure_ascii=False)

if __name__ == '__main__':
    app.run(port=80,debug=False)

增加针对定位对象组操作: 将多个表关联起来,并实现,创建,查询,删除,定位对象功能。

SQL建库建表

import sqlite3

# 增加用户表
def UserDB():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    create = "create table UserDB(" \
             "username char(32) not null," \
             "password char(32) not null," \
             "user_key char(128) not null," \
             "company char(256) not null," \
             "lat_count int not null" \
             ")"

    cursor.execute(create)

    insert = "insert into UserDB(username,password,user_key,company,lat_count) values('lyshark','123456','1f3dsgf9834r98ug','联通数字科技有限公司',0);"
    cursor.execute(insert)

    insert = "insert into UserDB(username,password,user_key,company,lat_count) values('admin','1233','cef45f9f8480gfi5','联通数字科技有限公司',0);"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

# 登录创建定位对象表
def ObjectDB():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    create = "create table ObjectDB(" \
             "user_key char(128) not null," \
             "uname char(32) not null," \
             "mobile char(32) not null," \
             "ugroup char(32) not null," \
             "service_mobile char(32) not null," \
             "message_name char(512) not null," \
             "lat_count int not null," \
             "is_auth char(32) not null" \
             ")"

    cursor.execute(create)

    insert = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,lat_count,is_auth) " \
             "values('1f3dsgf9834r98ug','王瑞','15646596977','系统技术部','67882255','你好世界,这是一段测试文档',0,'未授权用户');"
    cursor.execute(insert)

    insert = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,lat_count,is_auth) " \
             "values('cef45f9f8480gfi5','郑凯','15646585548','系统技术部','67882255','你好世界,这是一段测试文档',0,'未授权用户');"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

if __name__ == "__main__":
    UserDB()
    ObjectDB()

Flask代码如下:

from flask import Flask, request
import json,sqlite3
import random,string

# 手机号规则
TelList = ["130", "131", "132", "145", "155", "156", "175", "176", "185", "186", "166", "146", "10646"]

# 数据库文件
sql_file = "database.db"

app = Flask(__name__, template_folder="templates")

# 查询SQL
def select_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        return cursor.fetchall()
    except Exception:
        return False

# 插入新记录SQL
def insert_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 更新SQL
def update_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 删除记录SQL
def delete_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 生成一个指定长度的随机字符串
def generate_random_str(randomlength=32):
    """
    string.digits=0123456789
    string.ascii_letters=abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    """
    str_list = [random.choice(string.digits + string.ascii_letters) for i in range(randomlength)]
    random_str = ''.join(str_list)
    return random_str

# ----------------------------------------------------------------------------------------------------------------------
# 登录 + 验证 + 登出
# ----------------------------------------------------------------------------------------------------------------------
# 用户登录
@app.route('/login', methods=['POST'])
def login():
    return_dict = {'status': '0', 'token': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                username = request.values.get("username")
                password = request.values.get("password")

                # 验证账号密码是否正确
                ref_data = select_sql("select * from UserDB;")

                # 当查询不为假则执行
                if ref_data != False:
                    for data in ref_data:
                        # 正确返回key
                        if (data[0] == username) and (data[1] == password):
                            return_dict["status"] = "1"
                            return_dict["token"] = data[2]
                            return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["token"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["token"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict["status"] = "0"
            return_dict["token"] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["token"] = "用户名或密码错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 判断是否登录
@app.route('/is_login',methods=['POST'])
def is_login():
    return_dict = {'status': '0','user': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("token")
                # 验证是否登录
                ref_data = select_sql("select * from UserDB;")
                if ref_data != False:
                    for data in ref_data:
                        if(data[2] == key):
                            return_dict['status'] = "1"
                            return_dict['user'] = data[0]
                            return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["user"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["user"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "0"
            return_dict['user'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["user"] = "密钥失效,请重新登录"
    return json.dumps(return_dict, ensure_ascii=False)

# 刷新用户Token
@app.route('/flush_token',methods=['POST'])
def flush_token():
    return_dict = {'status': '0','message': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("token")
                uuid = generate_random_str(32)

                # 用户登出 更新第一张表中的Key
                if update_sql("update UserDB set user_key='{}' where user_key='{}'".format(uuid, key)) != False:
                    # 更新第二张表中的Key
                    if update_sql("update ObjectDB set user_key='{}' where user_key='{}'".format(uuid, key)) != False:
                        return_dict["status"] = "1"
                        return_dict["message"] = "已刷新"
                        return json.dumps(return_dict, ensure_ascii=False)
            except Exception:
                return_dict["status"] = "0"
                return_dict["message"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "0"
            return_dict['message'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)


# ----------------------------------------------------------------------------------------------------------------------
# 定位对象相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 创建定位对象
@app.route('/create_object',methods=['POST'])
def create_object():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 6:
            key = request.values.get("token")
            uname = request.values.get("uname")
            mobile = request.values.get("mobile")
            ugroup = request.values.get("ugroup")
            service_mobile = request.values.get("service_mobile")
            message_name = request.values.get("message_name")

            # 验证是否是联通手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:

                # 查询UserDB表内是否存在用户传入的key
                ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
                if len(ref_data) != 0 and ref_data != False:

                    # 检查表内是否存在手机号
                    ref_mobile_data = select_sql("select count(mobile) from ObjectDB where mobile='{}'".format(mobile))
                    if int(ref_mobile_data[0][0]) == 0:

                        # 开始构建插入数据库语句
                        insert_ref = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,lat_count,is_auth) " \
             "values('{}','{}','{}','{}','{}','{}',0,'未授权用户');".format(key,uname,mobile,ugroup,service_mobile,message_name)
                        insert_ref_flag = insert_sql(insert_ref)

                        if insert_ref_flag == True:
                            return_dict["status"] = "1"
                            return_dict["message"] = "已新增定位对象"
                            return json.dumps(return_dict, ensure_ascii=False)
                        else:
                            return_dict["status"] = "0"
                            return_dict["message"] = "新增定位对象失败"
                            return json.dumps(return_dict, ensure_ascii=False)

                    else:
                        return_dict["status"] = "0"
                        return_dict["message"] = "手机号已存在,无法继续创建"
                        return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "传入Key密钥对错误"
                    return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "请输入联通手机号"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 查询所有定位对象
@app.route('/select_all_object',methods=['POST'])
def select_all_object():
    return_dict = {'status': '0','count': '0', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                ref_data_object = select_sql("select * from ObjectDB;")
                if ref_data_object != False:

                    # 循环组合成JSON
                    for item in ref_data_object:
                        li = [item[1],item[2],item[3],item[4],item[5]]
                        object_list.append(li)

                    return_dict["status"] = "1"
                    return_dict["count"] = len(object_list)
                    return_dict["message"] = object_list
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["count"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["count"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 删除定位对象
@app.route('/delete_object',methods=['POST'])
def delete_object():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 验证是否是联通手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 查询UserDB表内是否存在用户传入的key
                ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
                if len(ref_data) != 0 and ref_data != False:
                    ref = delete_sql("delete from ObjectDB where mobile = '{}'".format(mobile))
                    if ref == True:
                        return_dict["status"] = "1"
                        return_dict["message"] = "定位对象已删除"
                        return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "请输入联通手机号"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 用户组相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 查询所有用户组
@app.route('/select_all_group',methods=['POST'])
def select_all_group():
    return_dict = {'status': '0','count': 'none', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                # 查询组并去重后放入ref
                ref_select_data = select_sql("select ugroup from ObjectDB;")
                if ref_select_data != False:
                    for each in ref_select_data:
                        object_list.append(each[0])

                    ref = list( set(object_list) )
                    ref_count = len(set(object_list))

                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["count"] = ref_count
                    return_dict["message"] = ref
                    return json.dumps(return_dict, ensure_ascii=False)

                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 查询用户组成员
@app.route('/select_user_group',methods=['POST'])
def select_user_group():
    return_dict = {'status': '0','count': 'none', 'group':'none', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            ugroup = request.values.get("group")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                # 查询组并去重后放入ref
                ref_select_data = select_sql("select uname,mobile,is_auth from ObjectDB where ugroup='{}';".format(ugroup))
                if ref_select_data != False:
                    for each in ref_select_data:
                        object_list.append(each)

                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["count"] = len(object_list)

                    if len(object_list)==0:
                        return_dict["group"] = "none"
                    else:
                        return_dict["group"] = ugroup

                    return_dict["message"] = object_list
                    return json.dumps(return_dict, ensure_ascii=False)

                else:
                    return_dict["status"] = "0"
                    return_dict["group"] = "none"
                    return_dict["count"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["group"] = "none"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["group"] = "none"
            return_dict["count"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["group"] = "none"
    return_dict["count"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 修改用户组
@app.route('/update_user_group',methods=['POST'])
def update_user_group():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 3:
            key = request.values.get("token")
            mobile = request.values.get("mobile")
            ugroup = request.values.get("group")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 更新用户组
                if update_sql("update ObjectDB set ugroup='{}' where user_key='{}' and mobile='{}'".format(ugroup,key,mobile)) != False:
                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["message"] = "已更新"
                    return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 经纬度返回相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 模拟返回经纬度
@app.route('/get_lat',methods=['POST'])
def get_lat():
    return_dict = {'status': '0','mobile': 'none', 'longitude': 'none','latitude': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 通过说明是联通的手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 验证是否登录
                ref_UserDB_data = select_sql("select user_key from UserDB;")
                for each in ref_UserDB_data:
                    if(each[0] == key):

                        # 判断是否为授权用户
                        select_auth = select_sql("select is_auth from ObjectDB where mobile='{}'".format(mobile))
                        if select_auth[0][0] != "已授权用户":
                            return_dict = {'status': '0', 'message': '未授权用户,请授权'}
                            return json.dumps(return_dict, ensure_ascii=False)
                        else:
                            # 如果授权了,直接定位返回结果
                            return_dict['status'] = '1'
                            return_dict['mobile'] = mobile
                            return_dict['longitude'] = '172.43'
                            return_dict['latitude'] = '22.56'

                            # UserDB 中的定位次数递增一次
                            ref_UserDB_Count = select_sql("select lat_count from UserDB where user_key='{}';".format(key))
                            if ref_UserDB_Count != False:
                                new_count = int(ref_UserDB_Count[0][0]) + 1
                                update_sql("update UserDB set lat_count={} where user_key='{}'".format(new_count,key))

                            # ObjectDB 中的定位次数递增一次
                            ref_Object_Count = select_sql("select lat_count from ObjectDB where mobile='{}'".format(mobile))
                            if ref_Object_Count != False:
                                new_count = int(ref_Object_Count[0][0]) + 1
                                update_sql("update ObjectDB set lat_count={} where mobile='{}'".format(new_count,mobile))

                            return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict = {'status': '0', 'message': '请输入联通手机号'}
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0','message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return json.dumps(return_dict, ensure_ascii=False)

# 查询总调用定位次数
@app.route('/select_all_count',methods=['POST'])
def select_all_count():
    return_dict = {'status': '0','lat_count': '0'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")
            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):

                    # 查询统计次数
                    ref_data = select_sql("select lat_count from UserDB where user_key='{}';".format(key))
                    return_dict['status'] = '1'
                    return_dict['lat_count'] = str(ref_data[0][0])
                    return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0','message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 查询某手机号调用次数
@app.route('/select_mobile_count',methods=['POST'])
def select_mobile_count():
    return_dict = {'status': '0','mobile': 'none', 'lat_count': '0'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 通过说明是联通的手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 验证是否登录
                ref_UserDB_data = select_sql("select user_key from UserDB;")
                for each in ref_UserDB_data:
                    if (each[0] == key):
                        # 查询统计次数
                        ref_data = select_sql("select lat_count from ObjectDB where mobile='{}';".format(mobile))
                        return_dict['status'] = '1'
                        return_dict['mobile'] = mobile
                        return_dict['lat_count'] = str(ref_data[0][0])
                        return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict = {'status': '0', 'message': '请输入联通手机号'}
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 查询某个组调用总次数
@app.route('/select_group_count',methods=['POST'])
def select_group_count():
    return_dict = {'status': '0','group': 'none', 'lat_count': '0'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            ugroup = request.values.get("group")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):
                    # 查询统计次数
                    ref_data = select_sql("select lat_count from ObjectDB where ugroup='{}';".format(ugroup))
                    group_count = 0
                    for count in ref_data:
                        group_count = group_count + int(count[0])

                    return_dict['status'] = '1'
                    return_dict['group'] = ugroup
                    return_dict['lat_count'] = group_count
                    return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 鉴权接口 相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 查询用户权限状态
@app.route('/select_auth_table',methods=['POST'])
def select_auth_table():
    return_dict = {'status': '0','unauthorized': [],'authorized': []}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):
                    # 查询统计次数
                    ref_data = select_sql("select mobile,is_auth from ObjectDB;")

                    not_auth = []
                    success_auth = []

                    for each in ref_data:
                        if each[1] == "未授权用户":
                            not_auth.append(each[0])
                        elif each[1] == "已授权用户":
                            success_auth.append(each[0])

                    return_dict['status'] = '1'
                    return_dict['unauthorized'] = not_auth
                    return_dict['authorized'] = success_auth
                    return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 其他 相关接口
# ----------------------------------------------------------------------------------------------------------------------

@app.route('/get_version',methods=['POST'])
def get_version():
    return_dict = {'status': '1','version': '1.0.0', 'build': '2021-12-15 9:57'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(404)
def not_found(error):
    return_dict = {'status': '1', 'message': '页面没有找到'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(405)
def not_found(error):
    return_dict = {'status': '1', 'message': '服务器不提供请求类型'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(500)
def not_found(error):
    return_dict = {'status': '1', 'message': '错误接口'}
    return json.dumps(return_dict, ensure_ascii=False)

if __name__ == '__main__':
    app.run(port=80,debug=True)

增加验证码功能: 对程序增加验证码验证功能,代码如下:

SQL语句

import sqlite3

db = "database.db"

def DropDB():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()

    drops = "drop table UserDB;"
    cursor.execute(drops)

    drops = "drop table ObjectDB;"
    cursor.execute(drops)

    drops = "drop table LocationCountDB;"
    cursor.execute(drops)

    drops = "drop table VerificationCodeDB;"
    cursor.execute(drops)

    conn.commit()
    cursor.close()
    conn.close()

# 用户表
def UserDB():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    create = "create table UserDB(" \
             "username char(32) not null," \
             "password char(32) not null," \
             "user_key char(128) not null" \
             ")"

    cursor.execute(create)

    insert = "insert into UserDB(username,password,user_key) values('lyshark','123456','1f3dsgf9834r98ug');"
    cursor.execute(insert)

    insert = "insert into UserDB(username,password,user_key) values('admin','1233','cef45f9f8480gfi5');"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

# 定位对象表
def ObjectDB():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    create = "create table ObjectDB(" \
             "user_key char(128) not null," \
             "uname char(32) not null," \
             "mobile char(32) not null," \
             "ugroup char(32) not null," \
             "service_mobile char(32) not null," \
             "message_name char(512) not null," \
             "is_auth char(32) not null" \
             ")"

    cursor.execute(create)

    insert = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,is_auth) " \
             "values('1f3dsgf9834r98ug','王瑞','15646596977','系统技术部','67882255','你好世界,这是一段测试文档','未授权用户');"
    cursor.execute(insert)

    insert = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,is_auth) " \
             "values('cef45f9f8480gfi5','郑凯','15646585548','系统技术部','67882255','你好世界,这是一段测试文档','已授权用户');"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

# 定位次数费率表
def LocationCountDB():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    create = "create table LocationCountDB(" \
             "uname char(32) not null," \
             "mobile char(32) not null unique," \
             "lat_count int not null," \
             "lat_rate float not null," \
             "trajectory_count int not null," \
             "trajectory_rate float not null," \
             "enclosure_count int not null," \
             "enclosure_rate int not null" \
             ")"

    cursor.execute(create)

    insert = "insert into LocationCountDB(uname,mobile,lat_count,lat_rate,trajectory_count,trajectory_rate,enclosure_count,enclosure_rate) " \
             "values('王瑞','15646596977',0,0,0,0,0,0);"
    cursor.execute(insert)

    insert = "insert into LocationCountDB(uname,mobile,lat_count,lat_rate,trajectory_count,trajectory_rate,enclosure_count,enclosure_rate) " \
             "values('郑凯','15646585548',0,0,0,0,0,0);"
    cursor.execute(insert)

    conn.commit()
    cursor.close()
    conn.close()

# 验证码验证表
def VerificationCodeDB():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    create = "create table VerificationCodeDB(" \
             "mobile char(32) not null unique," \
             "code char(16) not null unique," \
             "time_stamp int not null" \
             ")"

    cursor.execute(create)

    conn.commit()
    cursor.close()
    conn.close()

if __name__ == "__main__":
    UserDB()
    ObjectDB()
    LocationCountDB()
    VerificationCodeDB()

Python代码

from flask import Flask, request
import json,sqlite3
import random,string
import time,datetime

# 手机号规则
TelList = ["130", "131", "132", "145", "155", "156", "175", "176", "185", "186", "166", "146", "10646"]

# 数据库文件
sql_file = "database.db"

app = Flask(__name__, template_folder="templates")

# 查询SQL
def select_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        return cursor.fetchall()
    except Exception:
        return False

# 插入新记录SQL
def insert_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 更新SQL
def update_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False

# 删除记录SQL
def delete_sql(sql):
    try:
        conn = sqlite3.connect(sql_file)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        return True
    except Exception:
        return False


# 生成一个指定长度的随机字符串
def generate_random_str(randomlength=32):
    str_list = [random.choice(string.digits + string.ascii_letters) for i in range(randomlength)]
    random_str = ''.join(str_list)
    return random_str

# ----------------------------------------------------------------------------------------------------------------------
# 登录 + 验证 + 登出
# ----------------------------------------------------------------------------------------------------------------------
# 用户登录
@app.route('/login', methods=['POST'])
def login():
    return_dict = {'status': '0', 'token': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                username = request.values.get("username")
                password = request.values.get("password")

                # 验证账号密码是否正确
                ref_data = select_sql("select * from UserDB;")

                # 当查询不为假则执行
                if ref_data != False:
                    for data in ref_data:
                        # 正确返回key
                        if (data[0] == username) and (data[1] == password):
                            return_dict["status"] = "1"
                            return_dict["token"] = data[2]
                            return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["token"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["token"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict["status"] = "0"
            return_dict["token"] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["token"] = "用户名或密码错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 判断是否登录
@app.route('/is_login',methods=['POST'])
def is_login():
    return_dict = {'status': '0','user': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("token")
                # 验证是否登录
                ref_data = select_sql("select * from UserDB;")
                if ref_data != False:
                    for data in ref_data:
                        if(data[2] == key):
                            return_dict['status'] = "1"
                            return_dict['user'] = data[0]
                            return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["user"] = "查询记录失败"
                    return json.dumps(return_dict, ensure_ascii=False)

            except Exception:
                return_dict["status"] = "0"
                return_dict["user"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "0"
            return_dict['user'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["user"] = "密钥失效,请重新登录"
    return json.dumps(return_dict, ensure_ascii=False)

# 刷新用户Token
@app.route('/flush_token',methods=['POST'])
def flush_token():
    return_dict = {'status': '0','message': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0:
            try:
                key = request.values.get("token")
                uuid = generate_random_str(32)

                # 用户登出 更新第一张表中的Key
                if update_sql("update UserDB set user_key='{}' where user_key='{}'".format(uuid, key)) != False:
                    # 更新第二张表中的Key
                    if update_sql("update ObjectDB set user_key='{}' where user_key='{}'".format(uuid, key)) != False:
                        return_dict["status"] = "1"
                        return_dict["message"] = "已刷新"
                        return json.dumps(return_dict, ensure_ascii=False)
            except Exception:
                return_dict["status"] = "0"
                return_dict["message"] = "接口异常"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['status'] = "0"
            return_dict['message'] = "传入参数不能为空"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)


# ----------------------------------------------------------------------------------------------------------------------
# 定位对象相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 创建定位对象
@app.route('/create_object',methods=['POST'])
def create_object():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 6:
            key = request.values.get("token")
            uname = request.values.get("uname")
            mobile = request.values.get("mobile")
            ugroup = request.values.get("ugroup")
            service_mobile = request.values.get("service_mobile")
            message_name = request.values.get("message_name")

            # 验证是否是联通手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:

                # 查询UserDB表内是否存在用户传入的key
                ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
                if len(ref_data) != 0 and ref_data != False:

                    # 检查表内是否存在手机号
                    ref_mobile_data = select_sql("select count(mobile) from ObjectDB where mobile='{}'".format(mobile))
                    if int(ref_mobile_data[0][0]) == 0:

                        # 开始构建插入数据库语句
                        insert_ref = "insert into ObjectDB(user_key,uname,mobile,ugroup,service_mobile,message_name,is_auth) " \
             "values('{}','{}','{}','{}','{}','{}','未授权用户');".format(key,uname,mobile,ugroup,service_mobile,message_name)
                        insert_ref_flag = insert_sql(insert_ref)

                        if insert_ref_flag == True:

                            # 同步插入计数计费表
                            insert_sql("insert into LocationCountDB(uname,mobile,lat_count,lat_rate,trajectory_count,trajectory_rate,enclosure_count,enclosure_rate) " \
                                     "values('{}','{}',0,0,0,0,0,0);".format(uname,mobile))

                            return_dict["status"] = "1"
                            return_dict["message"] = "已新增定位对象"
                            return json.dumps(return_dict, ensure_ascii=False)
                        else:
                            return_dict["status"] = "0"
                            return_dict["message"] = "新增定位对象失败"
                            return json.dumps(return_dict, ensure_ascii=False)

                    else:
                        return_dict["status"] = "0"
                        return_dict["message"] = "手机号已存在,无法继续创建"
                        return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "传入Key密钥对错误"
                    return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "请输入联通手机号"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 查询所有定位对象
@app.route('/select_all_object',methods=['POST'])
def select_all_object():
    return_dict = {'status': '0','count': '0', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                ref_data_object = select_sql("select * from ObjectDB;")
                if ref_data_object != False:

                    # 循环组合成JSON
                    for item in ref_data_object:
                        li = [item[1],item[2],item[3],item[4],item[5]]
                        object_list.append(li)

                    return_dict["status"] = "1"
                    return_dict["count"] = len(object_list)
                    return_dict["message"] = object_list
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["count"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["count"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 删除定位对象
@app.route('/delete_object',methods=['POST'])
def delete_object():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 验证是否是联通手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 查询UserDB表内是否存在用户传入的key
                ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
                if len(ref_data) != 0 and ref_data != False:
                    ref = delete_sql("delete from ObjectDB where mobile = '{}'".format(mobile))
                    if ref == True:
                        return_dict["status"] = "1"
                        return_dict["message"] = "定位对象已删除"
                        return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "请输入联通手机号"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 用户组相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 查询所有用户组
@app.route('/select_all_group',methods=['POST'])
def select_all_group():
    return_dict = {'status': '0','count': 'none', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                # 查询组并去重后放入ref
                ref_select_data = select_sql("select ugroup from ObjectDB;")
                if ref_select_data != False:
                    for each in ref_select_data:
                        object_list.append(each[0])

                    ref = list( set(object_list) )
                    ref_count = len(set(object_list))

                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["count"] = ref_count
                    return_dict["message"] = ref
                    return json.dumps(return_dict, ensure_ascii=False)

                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 查询用户组成员
@app.route('/select_user_group',methods=['POST'])
def select_user_group():
    return_dict = {'status': '0','count': 'none', 'group':'none', 'message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            ugroup = request.values.get("group")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 定义组合模板
                object_list = []

                # 查询组并去重后放入ref
                ref_select_data = select_sql("select uname,mobile,is_auth from ObjectDB where ugroup='{}';".format(ugroup))
                if ref_select_data != False:
                    for each in ref_select_data:
                        object_list.append(each)

                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["count"] = len(object_list)

                    if len(object_list)==0:
                        return_dict["group"] = "none"
                    else:
                        return_dict["group"] = ugroup

                    return_dict["message"] = object_list
                    return json.dumps(return_dict, ensure_ascii=False)

                else:
                    return_dict["status"] = "0"
                    return_dict["group"] = "none"
                    return_dict["count"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict["status"] = "0"
                return_dict["group"] = "none"
                return_dict["count"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["group"] = "none"
            return_dict["count"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["group"] = "none"
    return_dict["count"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# 修改用户组
@app.route('/update_user_group',methods=['POST'])
def update_user_group():
    return_dict = {'status': '0','message': 'none'}
    if request.method == "POST":
        # 验证参数是否一致
        if len(request.get_data()) != 0 and len(request.values) == 3:
            key = request.values.get("token")
            mobile = request.values.get("mobile")
            ugroup = request.values.get("group")
            # 查询UserDB表内是否存在用户传入的key
            ref_data = select_sql("select user_key from UserDB where user_key='{}';".format(key))
            if len(ref_data) != 0 and ref_data != False:
                # 更新用户组
                if update_sql("update ObjectDB set ugroup='{}' where user_key='{}' and mobile='{}'".format(ugroup,key,mobile)) != False:
                    # 返回系统部门
                    return_dict["status"] = "1"
                    return_dict["message"] = "已更新"
                    return json.dumps(return_dict, ensure_ascii=False)
                else:
                    return_dict["status"] = "0"
                    return_dict["message"] = "查询异常"
                    return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict["status"] = "0"
                return_dict["message"] = "查询异常"
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict["status"] = "0"
            return_dict["message"] = "传入参数错误"
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict["status"] = "0"
    return_dict["message"] = "未知错误"
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 经纬度返回相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 返回经纬度
@app.route('/select_lat',methods=['POST'])
def select_lat():
    return_dict = {'status': '0','mobile': 'none', 'longitude': 'none','latitude': 'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 通过说明是联通的手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 验证是否登录
                ref_UserDB_data = select_sql("select user_key from UserDB;")
                for each in ref_UserDB_data:
                    if(each[0] == key):

                        # 判断是否为授权用户
                        select_auth = select_sql("select is_auth,uname from ObjectDB where mobile='{}'".format(mobile))
                        if select_auth[0][0] != "已授权用户":
                            return_dict = {'status': '0', 'message': '未授权用户,请授权'}
                            return json.dumps(return_dict, ensure_ascii=False)
                        else:
                            # 如果授权了,直接定位返回结果
                            return_dict['status'] = '1'
                            return_dict['mobile'] = mobile
                            return_dict['longitude'] = '172.43'
                            return_dict['latitude'] = '22.56'

                            # LocationCountDB 中的定位次数递增一次
                            ref_LocationCount = select_sql("select lat_count from LocationCountDB where mobile='{}';".format(mobile))
                            if ref_LocationCount != False:
                                new_count = int(ref_LocationCount[0][0]) + 1
                                update_sql("update LocationCountDB set lat_count={} where mobile='{}'".format(new_count,mobile))

                            return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict = {'status': '0', 'message': '请输入联通手机号'}
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0','message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return json.dumps(return_dict, ensure_ascii=False)

# 查询总计调用次数与费率信息
@app.route('/select_all_count',methods=['POST'])
def select_all_count():
    return_dict = {'status': '0', 'lat_count': '0', 'lat_rate':'0.00', 'trajectory_count': '0', 'trajectory_rate':'0.00', 'enclosure_count':'0', 'enclosure_rate':'0.0'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):

                    # 查询统计次数
                    ref_data = select_sql("select lat_count,lat_rate,trajectory_count,trajectory_rate,enclosure_count,enclosure_rate"
                                          " from LocationCountDB;")

                    lat_count = 0
                    trajectory_count = 0
                    enclosure_count = 0

                    # 累加计数器
                    for item in ref_data:
                        lat_count = lat_count + int(item[0])
                        trajectory_count = trajectory_count + int(item[2])
                        enclosure_count = enclosure_count + int(item[4])

                    return_dict['status'] = '1'
                    return_dict['lat_count'] = lat_count
                    return_dict['lat_rate'] = item[1]
                    return_dict['trajectory_count'] = trajectory_count
                    return_dict['trajectory_rate'] = item[3]
                    return_dict['enclosure_count'] = enclosure_count
                    return_dict['enclosure_rate'] = item[5]
                    return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0','message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 查询某手机号调用次数与费率
@app.route('/select_mobile_count',methods=['POST'])
def select_mobile_count():
    return_dict = {'status': '0', 'mobile': 'none', 'lat_count': '0', 'lat_rate':'0.00', 'trajectory_count': '0', 'trajectory_rate':'0.00', 'enclosure_count':'0', 'enclosure_rate':'0.0'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 通过说明是联通的手机号
            if mobile.strip()[0:3] in TelList or mobile.strip()[0:5] in TelList:
                # 验证是否登录
                ref_UserDB_data = select_sql("select user_key from UserDB;")
                for each in ref_UserDB_data:
                    if (each[0] == key):

                        # 查询统计次数
                        ref_data = select_sql(
                            "select mobile,lat_count,lat_rate,trajectory_count,trajectory_rate,enclosure_count,enclosure_rate"
                            " from LocationCountDB where mobile='{}';".format(mobile))

                        return_dict['status'] = '1'
                        return_dict['mobile'] = ref_data[0][0]
                        return_dict['lat_count'] = ref_data[0][1]
                        return_dict['lat_rate'] = ref_data[0][2]
                        return_dict['trajectory_count'] = ref_data[0][3]
                        return_dict['trajectory_rate'] = ref_data[0][4]
                        return_dict['enclosure_count'] = ref_data[0][5]
                        return_dict['enclosure_rate'] = ref_data[0][6]

                        return json.dumps(return_dict, ensure_ascii=False)

            else:
                return_dict = {'status': '0', 'message': '请输入联通手机号'}
                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 鉴权接口 相关接口
# ----------------------------------------------------------------------------------------------------------------------

# 查询用户权限状态
@app.route('/select_auth_table',methods=['POST'])
def select_auth_table():
    return_dict = {'status': '0','unauthorized': [],'authorized': []}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 1:
            key = request.values.get("token")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):
                    # 查询统计次数
                    ref_data = select_sql("select mobile,is_auth from ObjectDB;")

                    not_auth = []
                    success_auth = []

                    for each in ref_data:
                        if each[1] == "未授权用户":
                            not_auth.append(each[0])
                        elif each[1] == "已授权用户":
                            success_auth.append(each[0])

                    return_dict['status'] = '1'
                    return_dict['unauthorized'] = not_auth
                    return_dict['authorized'] = success_auth
                    return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 发送验证码
@app.route('/send_message',methods=['POST'])
def send_message():
    return_dict = {'status': '0' ,'message':'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")
            for each in ref_UserDB_data:
                if (each[0] == key):

                    # 查询是否授权
                    ref_data = select_sql("select mobile,is_auth from ObjectDB;")
                    for each in ref_data:

                        # 如果是未授权则提供验证
                        if each[1] == "未授权用户" and each[0] == mobile:

                            msg_code = "1234"

                            # 设置五分钟时间戳
                            timeStamp = int(time.time()) + 300
                            dateArray = datetime.datetime.fromtimestamp(timeStamp)
                            otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S")

                            message_code = "您本次登录的验证码是:{},有效时间:5分钟。验证码有效期至:{}".format(str(msg_code), otherStyleTime)
                            print(message_code)

                            insert_sql("insert into VerificationCodeDB(mobile,code,time_stamp) values('{}','{}',{})".format(mobile,msg_code,timeStamp))

                            return_dict = {'status': '1', 'message': '验证码已发送,请注意查收'}
                            return json.dumps(return_dict, ensure_ascii=False)

                        else:
                            return_dict = {'status': '0', 'message': '用户已授权过,无需重复授权'}
                            return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 授权接口
@app.route('/set_auth',methods=['POST'])
def set_auth():
    return_dict = {'status': '0','mobile':'none','message':'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 4:
            key = request.values.get("token")
            mobile = request.values.get("mobile")
            vf_code = request.values.get("code")
            flag = request.values.get("flag")

            if flag == "False":
                return_dict = {'status': '0', 'message': '如需授权,请接受许可协议'}
                return json.dumps(return_dict, ensure_ascii=False)

            elif flag == "True":
                # 验证是否登录
                ref_UserDB_data = select_sql("select user_key from UserDB;")
                for each in ref_UserDB_data:
                    if (each[0] == key):

                        # 查询授权记录
                        ref_data = select_sql("select is_auth from ObjectDB where mobile='{}';".format(mobile))

                        # 如果是未授权则继续
                        if ref_data[0][0] == "未授权用户":
                            LocaltimeStamp = int(time.time())
                            try:
                                # 查询当前用户验证码与时间戳
                                ref_vfa = select_sql("select mobile,time_stamp from VerificationCodeDB where mobile='{}';".format(mobile))
                                if ref_vfa != False:

                                    # 验证时间戳是否有效
                                    if LocaltimeStamp <= ref_vfa[0][1]:

                                        # 检查用户输入验证码是否有效,如果有效则将该用户设置为已授权用户.
                                        ref_vf_code = select_sql("select code from VerificationCodeDB where mobile='{}'".format(mobile))

                                        # 验证码正确
                                        if ref_vf_code[0][0] == vf_code:

                                            update_sql("update ObjectDB set is_auth='{}' where mobile='{}'".format("已授权用户",mobile))

                                            return_dict = {'status': '1', 'message': '授权完成'}
                                            return json.dumps(return_dict, ensure_ascii=False)

                                        # 验证码错误
                                        else:
                                            return_dict = {'status': '1', 'message': '验证码错误,授权失败'}
                                            return json.dumps(return_dict, ensure_ascii=False)


                                    elif LocaltimeStamp > ref_vfa[0][1]:
                                        delete_sql("delete from VerificationCodeDB where mobile='{}'".format(mobile))
                                        return_dict = {'status': '0', 'message': '验证码已过期,请重新获取验证码'}
                                        return json.dumps(return_dict, ensure_ascii=False)

                            except Exception:
                                return_dict = {'status': '0', 'message': '请先发送验证码,然后在调用该接口,完成授权'}
                                return json.dumps(return_dict, ensure_ascii=False)
                        else:
                            # 如果已授权过,删除表中的验证码字段
                            delete_sql("delete from VerificationCodeDB where mobile='{}'".format(mobile))
                            return_dict = {'status': '0', 'message': '用户已授权,无需继续授权'}
                            return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# 取消授权接口
@app.route('/unset_auth',methods=['POST'])
def unset_auth():

    return_dict = {'status': '0','mobile':'none','message':'none'}

    if request.method == "POST":
        if len(request.get_data()) != 0 and len(request.values) == 2:
            key = request.values.get("token")
            mobile = request.values.get("mobile")

            # 验证是否登录
            ref_UserDB_data = select_sql("select user_key from UserDB;")

            if ref_UserDB_data != False:
                for each in ref_UserDB_data:
                    if (each[0] == key):
                        # 查询授权记录
                        ref_data = select_sql("select is_auth from ObjectDB where mobile='{}';".format(mobile))

                        # 未授权直接返回
                        if ref_data[0][0] == "未授权用户":
                            return_dict['status'] = '0'
                            return_dict['mobile'] = mobile
                            return_dict['message'] = '未授权用户,无需取消授权'
                            return json.dumps(return_dict, ensure_ascii=False)

                        # 已授权直接改为未授权
                        else:
                            if update_sql("update ObjectDB set is_auth='{}' where mobile='{}'".format("未授权用户",mobile)) != False:
                                return_dict['status'] = '1'
                                return_dict['mobile'] = mobile
                                return_dict['message'] = '取消授权成功'
                                return json.dumps(return_dict, ensure_ascii=False)

        else:
            return_dict = {'status': '0', 'message': '传入参数错误'}
            return json.dumps(return_dict, ensure_ascii=False)

    return_dict = {'status': '0', 'message': '未知错误'}
    return json.dumps(return_dict, ensure_ascii=False)

# ----------------------------------------------------------------------------------------------------------------------
# 其他功能
# ----------------------------------------------------------------------------------------------------------------------

@app.route('/get_version',methods=['POST'])
def get_version():
    return_dict = {'status': '1','version': '1.0.0', 'build': '2021-12-15 9:57'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(404)
def not_found(error):
    return_dict = {'status': '404', 'message': '页面没有找到'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(405)
def not_found(error):
    return_dict = {'status': '405', 'message': '服务器不提供请求类型'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(500)
def not_found(error):
    return_dict = {'status': '500', 'message': '传入参数有误,或存在不规范输入'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(400)
def not_found(error):
    return_dict = {'status': '400', 'message': 'Bad Request'}
    return json.dumps(return_dict, ensure_ascii=False)

@app.errorhandler(409)
def not_found(error):
    return_dict = {'status': '409', 'message': 'Conflict'}
    return json.dumps(return_dict, ensure_ascii=False)

if __name__ == '__main__':
    app.run(port=80,debug=False)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章