社区版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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Cloud原理详解[通俗易懂]

    Spring Cloud原理详解[通俗易懂]概述毫无疑问,SpringCloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对SpringCloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈SpringCloud微服务架构的底层原理。实际上,SpringCloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖…

    2022年6月7日
    72
  • vue模板渲染 mustache简单实现[通俗易懂]

    vue模板渲染 mustache简单实现[通俗易懂]vue源码探究,模板渲染,实现mustache的渲染功能

    2022年7月19日
    12
  • goland 2021.01 激活码[在线序列号]

    goland 2021.01 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    74
  • 已刻游戏目录

    已刻游戏目录单机游戏1.生化奇兵1、2、32.蔷薇少女格斗3.全女格斗2.04.劲乐团5.魔兽争霸6.生化危机1-6启示录7.MaxPayne2+38.寄生前夜9.恐龙危机1、210.梦幻模拟战4、511.PS模拟器:北欧女神、放浪冒险谭、寄生前夜、寂静岭1、异度装甲、月下夜想曲、古惑狼1-3、封神演义、苍魔灯、鬼屋魔影、武藏传12.FC模拟器13.MD模拟器14.杀手4…

    2022年5月8日
    36
  • 计算机相关外文文献_环境设计论文参考文献

    计算机相关外文文献_环境设计论文参考文献计算机毕业设计外文参考文献[1.阿卜杜勒拉蒂夫t。和f.博伊尔。一种用于在网格上部署JavaEE系统的节点分配系统2009。突尼斯,哈姆梅特。[2.公共交通中的电子治理:美国公共交通研究中心——案例研究尼泊尔加德满都。第7-12页。[3.长春,谢志成,等,一种新的两阶段模糊C-均值聚类算法2010:中国吉林长春。第85-88页。[4.长春,钟志辉,三维地震记录的二维模拟1991:中国北…

    2022年9月29日
    2
  • sense官网(sense的用法)

    OPNsense利用通用地址冗余协议或CARP进行硬件故障转移。可以将两个或多个防火墙配置为故障转移组。如果主节点上的一个接口出现故障,或者主节点完全脱机,则辅助节点将变为活动状态。利用OPNsense的这一强大功能,可创建具有自动无缝故障转移功能的完全冗余防火墙。切换到备份网络时,连接将保持活动状态,同时对用户的干扰最小。自动故障转移如果主防火墙变得不可用,则辅助防火墙将在…

    2022年4月13日
    109

发表回复

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

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