社区版pycharm flask封装接口[通俗易懂]

社区版pycharm flask封装接口[通俗易懂]因为装的pycharm版本是社区版,没有单独的flask项目创建入口1、首先和创建python项目一样创建一个项目:要选择虚拟环境(一般默认即可)2、项目文件夹下安装flask:npminstallflask前端渲染后续研究,此次只封装接口3导包notes:1、调试过程中要手动打开debug模式2、cors是解决前端跨域问题impor…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

因为装的pycharm版本是社区版,没有单独的flask项目创建入口

1、首先和创建python项目一样创建一个项目:要选择虚拟环境(一般默认即可)

社区版pycharm flask封装接口[通俗易懂]

2、项目文件夹下安装flask:npm install flask

前端渲染后续研究,此次只封装接口

3 导包

notes:1、调试过程中要手动打开debug模式

            2、cors是解决前端跨域问题

import os
import json
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
from flask import Flask,jsonify,request
from flask_cors import *   #solve cross-domain problems
from flask import render_template
import pymysql
app = Flask(__name__) #must have
#app.config['DEBUG'] = True
CORS(app, supports_credentials=True) #solve cross-domain problems

Jetbrains全家桶1年46,售后保障稳定

4 连接数据库,对数据库进行增删改

notes:如果请求的参数是一个参数,要注意是不是元组格式,如果是需要在参数后加逗号,因为元组只有一个元素的话 不加逗号 就不是元祖(参考:select2函数)

import os
import json
#from flask_cors import *
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
from flask import Flask,jsonify,request
from flask_cors import *
from flask import render_template
import pymysql

app = Flask(__name__)
#app.config['DEBUG'] = True
CORS(app, supports_credentials=True)
class MysqldbHelper(object):
    def __init__(self):
     try:
        self.db = pymysql.connect(
            host="127.0.0.1",
            user="root",
            passwd="123456",
            port=55111,
            db="test_suit",
            charset='utf8')
        #self.db = pymysql.connect(self.host, self.user, self.passwd, self.dbase, self.port, charset='utf8')
     except pymysql.err:
         print('error')

    def select1(self, sql):
        ''' 数据库查询 '''
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql)  # 返回 查询数据 条数 可以根据 返回值 判定处理结果

            data = self.cursor.fetchall()  # 返回所有记录列表
            return data
        except:
            print('Error: unable to fecth data')
        finally:
            self.cursor.close()
            self.db.close()


        # return {c.name: getattr(self, c.name) for c in self.__table__.columns}
        # 上面的有缺陷,表字段和属性不一致会有问题


    def select2(self, sql,args):
        ''' 数据库查询 '''
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql,(args,))  # 返回 查询数据 条数 可以根据 返回值 判定处理结果

            data = self.cursor.fetchall()  # 返回所有记录列表
            return data
        except:
            print('Error: unable to fecth data')
        finally:
            self.cursor.close()
            self.db.close()

    def insert(self,sql,args):
        self.cursor = self.db.cursor()
        try:
            # 执行sql
            #data = (Tsuitname, Tname, Tdescriber, Tstate, Tresult, Tresultdes)
           # self.cursor.execute(sql,(args['Tsuitname'],args['Tname'],args['Tdescriber'],args['Tstate'],args['Tresult'],args['Tresultdes'],)) 字典的方式
            self.cursor.execute(sql,args)
            # tt = self.cursor.execute(sql)  # 返回 插入数据 条数 可以根据 返回值 判定处理结果
            # print(tt)
            self.db.commit()
            return True
        except:
            # 发生错误时回滚
            self.db.rollback()
            return  False
        finally:
            self.cursor.close()
            self.db.close()

    def delete(self,sql,args):
        ''' 操作数据库数据删除 '''
        self.cursor = self.db.cursor()
        try:
            # 执行sql
            self.cursor.execute(sql,(args,))
            # tt = self.cursor.execute(sql) # 返回 删除数据 条数 可以根据 返回值 判定处理结果
            # print(tt)
            self.db.commit()


        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()

    def update(self,sql,args):
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql,args)
            self.db.commit()
            return True
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()








5、设置接口路由 及传参/返回值等

@app.route('/update', methods=[ 'POST']) 路由设置,格式为:http://localhost/update

methods=[ ‘POST’] 请求方法 get/post

获取json格式数据:request.json.get()可用postman调试,调试时把debug模式打开

前端渲染时:因为后端写的是json格式,前端请求时需将参数转化为json:

例如:service.post(‘http://localhost/insert’, JSON.stringify(参数), { headers: { ‘Content-Type’: ‘application/json; charset=UTF-8’ } });

以下代码的不足:接口不够规范,请求参数/返回数据 没有放到一个有名称的元组里

@app.route('/select2', methods=[ 'POST','GET'])
def sel2():
    db = MysqldbHelper()
    try:    #z这样判断不对,需要更改

        sql = 'select * from test_suit.suit'
        fc = db.select1(sql)
        return json.dumps(fc, ensure_ascii=False, indent=4)
    except:
        return ()

@app.route('/select', methods=[ 'POST','GET'])
def sel():
    db = MysqldbHelper()
    idSuit =  request.json.get('idSuit',None)

    Tsuitname = request.json.get('Tsuitname', None)
    '''
    Tname = request.json.get('Tname', None)

    Tstate = request.json.get('Tstate', None)
    Tresult = request.json.get('Tresult', None)
    '''
    try:    #z这样判断不对,需要更改
        if idSuit != None:
            sql = 'select * from test_suit.suit where idSuit=%s '
            fc = db.select2(sql, idSuit)
        if Tsuitname != None:
            sql= 'select * from test_suit.suit where Tsuitname=%s'
            fc = db.select2(sql, Tsuitname)

        return json.dumps(fc, ensure_ascii=False, indent=4)
    except:
        return ()

@app.route('/delete', methods=[ 'POST'])
def dels():
    db = MysqldbHelper()
    idSuit=  request.json.get('idSuit')
    sql= 'delete from test_suit.suit where idSuit=%s'
    db.delete(sql,idSuit)
    return jsonify({"code": 200})


@app.route('/insert', methods=[ 'POST'])
def index():
    if request.method == 'POST':
        db = MysqldbHelper()
        Tsuitname = request.json.get('Tsuitname',None)
        #Tname = request.json['Tname']
        Tname = request.json.get('Tname', None)
        Tdescriber =request.json.get('Tdescriber',None)
        Tstate =  request.json.get('Tstate',None)
        Tresult = request.json.get('Tresult',None)
        Tresultdes =  request.json.get('Tresultdes',None)
        data=(Tname,Tdescriber,Tstate,Tresult,Tresultdes)
    #if (len(Tsuitname) != 0) & (len(Tname)!=0 ):
        sql_insert = 'insert into test_suit.suit value(default,%s,%s,%s,%s,%s,%s)'
        if db.insert(sql_insert,data):
          return jsonify({"code": 200, "mesg": "insert"})

@app.route('/update', methods=[ 'POST'])
def update():
    if request.method == 'POST':
        db = MysqldbHelper()
        idSuit = request.json.get('idSuit')
        Tsuitname = request.json.get('Tsuitname', None)
        Tsuitname = request.json.get('Tsuitname',None)
        #Tname = request.json['Tname']
        Tname = request.json.get('Tname', None)
        Tdescriber =request.json.get('Tdescriber',None)
        Tstate =  request.json.get('Tstate',None)
        Tresult = request.json.get('Tresult',None)
        Tresultdes =  request.json.get('Tresultdes',None)
        data=(Tsuitname,Tname,Tdescriber,Tstate,Tresult,Tresultdes,idSuit)
    #if (len(Tsuitname) != 0) & (len(Tname)!=0 ):
        sql_insert = 'update test_suit.suit set Tsuitname=%s,Tname=%s,Tdescriber=%s,Tstate=%s,Tresult=%s,Tresultdes=%s where idSuit=%s'

        if db.update(sql_insert,data):
          return jsonify({"code": 200, "mesg": "update"})
        else:
            return jsonify({"code": 500, "mesg": "update"})

@app.route('/hello')
def hello_world():
 name = request.args.get('name','')
 return 'Hello ' + name + '!'

if __name__=="__main__":

    #app.run(host='127.0.0.1', port='5678')
    app.run()

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210452.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 适配器模式的理解和示例[通俗易懂]

    适配器模式的理解和示例[通俗易懂]一、是什么1.定义:让原来不兼容的两个接口协同工作2.分类:类适配器、对象适配器、接口适配器3.角色目标接口:Target,该角色把其他类转换为我们期望的接口被适配者:Adapte

    2022年7月1日
    20
  • Android Studio提交项目到github

    Android Studio提交项目到github

    2021年10月2日
    50
  • Selenium面试题

    Selenium面试题NO.1Selenium是什么是一个开源的web自动化测试的框架,支持多种编程语言,支持跨浏览器平台进行测试NO.2Selenium中有哪些验证点?Selenium主要有三种验证点检查页面标题检查某些文字检查某些元素(文本框,下拉菜单,表等)NO.3你如何从Selenium连接到数据库?Selenium是一个WebUI自动化工具。它不提供任何API来建立数据库连接。这取决于你使用Selenium进行自动化的编程语言。NO.4如何提高selenium脚本的执行速度?1.优

    2022年6月20日
    27
  • 变电站后台监控系统[通俗易懂]

    变电站后台监控系统[通俗易懂]变电站后台监控系统实现对35KV变电站的主要设备和输、配电线路的自动监视、测量、自动控制和微机保护,以及与调度通信等综合性的自动化功能。实现对电网运行的实时监控,使值班人员和系统调度人员通过管理平台及时把握系统的运行状态和事故处理的主动性,另外配套的手机客户端软件实现了移动终端功能,可随时随地查看或管理电网,提高电网的自动化管理水平、供电质量。为达到这一目的,满足电网运行对变电站后台监控系统的要求,变电站综合电力自动化系统体系由“数据采集和控制”、“继电保护”、“直流电源系统”三大块构成变电站自动化基础。

    2022年7月25日
    11
  • 时间戳转换日期格式 linux_date命令设置时间

    时间戳转换日期格式 linux_date命令设置时间1.查看指定时间的时间戳 查看当前时间 #date+%s 查看指定时间 #date-d2008-01-01+%s  1199116800 #date-d20080101+%s 1199116800 2.将时间戳转换成date #date-d’1970-01-01UTC1199116800seconds’ 2008年01月01日星期二00:00:00CST #exp…

    2022年9月26日
    0
  • ac测评题库_用标号法求网络最大流

    ac测评题库_用标号法求网络最大流给定一个包含 n 个点 m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S 到点 T 的最大流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行三个整数 u,v,c,表示从点 u 到点 v 存在一条有向边,容量为 c。点的编号从 1 到 n。输出格式输出点 S 到点 T 的最大流。如果从点 S 无法到达点 T 则输出 0。数据范围2≤n≤10000,1≤m≤100000,0≤c≤10000,S≠T输入样例:7 14 1 71

    2022年8月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号