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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章