python 跨源请求的Flask数据库API

本文介绍了如何在Flask框架中使用GET和POST方法处理请求,包括获取参数、参数校验、构建SQL查询,并结合MysqlUtil进行数据库操作,展示了POST请求添加用户和GET请求获取用户列表的具体实现过程。
摘要由CSDN通过智能技术生成


一、导入模块

from flask import Flask,request
from utils.MysqlUtilss import Mysql
from flask_cors import CORS
import json


mysql = Mysql()
server = Flask(__name__,template_folder='../templates')
CORS(server,supports_credentials=True)

二、get与post获取获取到请求参数

1.在 Flask 中获取通过POST请求发送的 JSON 数据:
params=request.get_json()
2.在 Flask 中获取通过GET请求发送的查询参数:
params=request.args.to_dict()


三、 POST 请求的路由

@server.route(“/路径”,methods=[‘接口类型’])
def 自定义函数名():

第一步:获取前端参数

第二步:对前端参数进行校验是否正确

第三步:拼接sql

第四步:执行并返回结果

ruturn数据格式
res = {“success”: True,“message”: “新增成功”}
server.logger.info(f"res:{res}")
return json.dumps(res,ensure_ascii=False,cls=DateEncoder)

cls=DateEncoder 对Datatime进行特殊处理

json_dumps(dict)时,如果dict包含有汉字,一定加上ensure_ascii=False。否则按参数默认值True,意思是保证dumps之后的结果里所有的字符都能够被ascii表示,汉字在ascii的字符集里面,因此经过dumps以后的str里,汉字会变成对应的unicode。

@server.route("/api/add_user",methods=['post'])
# @decorator_parse_token 登录锁
def add_user():
 # ###############获取前端参数##############################
    params = request.get_json()
    print(params)
 # ###############对前端参数进行校验是否正确#########################
 compliance_list = ['所有字段']
    check_com = []
    for i in params.keys():
        if i not in compliance_list:
            check_com.append(False)
        else:
            pass
    if False in check_com:
        return {"success": False, "message": "修改失败"}
    if "username" in params:pass
    else:return {"success": False, "message": "修改失败"}
 # ###################拼接sql#####################
	user=params["username"]
	params.pop("username")
	if not params:
	    return {"success": False, "message": "修改失败"}
	
	set_sql = ','.join(['%s="%s"' % (i, j) for i, j in params.items()])
	select_sql="UPDATE user SET %s WHERE username='%s'"%(set_sql,user)
	print(select_sql)
# ###################执行并返回结果#####################
	mysql.exec(select_sql)
	res = {"success": True,"message": "新增成功"}
    server.logger.info(f"res:{res}")
    return json.dumps(res,ensure_ascii=False,cls=DateEncoder)

四、 GET 请求的路由

return数据格式

res = {“success”: True, “data”: re}
return json.dumps(res,ensure_ascii=False,cls=DateEncoder)

@server.route("/api/get_user_list", methods=['get'])
# @decorator_parse_token
def get_user_list():
    """
    获取用户列表
    :return:
    """
    # ###############获取前端参数##############################
    params=request.args.to_dict()
    print(params)
    server.logger.info("paramsdsad111%s:" % params)

    if "current" in params:
        params.pop("current")
        params.pop("pageSize")
    # ###############对前端参数进行校验是否正确#########################
    compliance_list = ['所有字段']
    required_list = ['必填字段']
    check_com = []
    check_req = []
    for i in params.keys():
        if i not in compliance_list:
            check_com.append(False)
        elif i not in required_list:
            check_req.append(False)
        else:pass
    if False in check_com:
        return {"message":"字段不合规"}
    # if len(check_req) == len(params):
    #     return {"message": "必填项校验失败"}
    # ###################拼接sql#####################
    params["is_delete"] = "0"
    # where_sql = ' and '.join(['%s="%s"' % (i, j) for i, j in params.items()])
    where_sql = ' and '.join([f'{i} like "%{j}%"' for i, j in params.items()])
    print(where_sql)
    select_sql = f"select * from user where {where_sql} order by id desc"
    print(select_sql)
    # ###################查询并返回结果#####################
    re = mysql.fetchall(select_sql)
    # print(re)
    res={"success":True,"data":re}
    return json.dumps(res)

五、数据拼接方法

 (1)SELECT:
    where_sql = ' and '.join([f'{i} like "%{j}%"' for i, j in params.items()])
    select_sql = f"select * from user where {where_sql} order by id desc"
(2) UPDATE:
    set_sql = ','.join(['%s="%s"' % (i, j) for i, j in params.items()])
    select_sql="UPDATE user SET %s WHERE username='%s'"%(set_sql,user)
(3) INSERT:
     k=",".join([i for i in params.keys()])
     v=",".join([f"'{i}'" for i in params.values()])
     sql_key = f"insert into keywords ({k}) values ({v})"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值