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


相关推荐

  • shell语法基础_实现shell

    shell语法基础_实现shellLinux操作系统Shell编程快速入门、shell变量、、运算符、条件判断、流程控制(if、case、for、while语句)。

    2022年9月13日
    3
  • bigdecimal保留2位小数_bigdecimal保留两位小数显示00

    bigdecimal保留2位小数_bigdecimal保留两位小数显示00作者:RaphetS第一种方法使用DecimalFormat类举个例子,假如我们需要保留两位小数,我们可以这样写DecimalFormatdf=newDecimalFormat(“0.00”);测试如下:doubled=0.200;DecimalFormatdf=newDecimalFormat(“0.00”);System.out.println(df.format(d))…

    2022年9月23日
    4
  • 解决Windows有网络连接但是显示“无Internet”的问题

    引子最近电脑莫名其妙地出现了可以正常上网,但是任务栏上的网络图标显示“无Internet”的问题。如果不使用微软账户的话,这个问题其实没什么影响,但是如果使用微软账户,这个问题会导致所有与微软账户相关的软件无法登录,比如Microsoft365和Outlook邮箱。在网上找了很多帖子都没有解决,最终通过相关帖子的学习提供一种解决该问题的思路,如果有用,请不要吝惜你的点赞????如果你有更好的解决方案,欢迎评论分享思路要想知道这个问题的原因,首先我想到的是需要了解Windows网络感知的原理。通过查

    2022年4月7日
    377
  • CAN协议 J1939「建议收藏」

    CAN协议 J1939「建议收藏」转自:http://blog.sina.com.cn/s/blog_bf97bd7e0102wl2y.html这几天在公司看了SAE推行的J1939标准(SAE:美国汽车工程协会),这里整理下学习要点,主要包含以下几个协议:物理层SAEJ1939-11(未看)数据链路层SAEJ1939-21网络层SAEJ1939-31(未看)应用层SAEJ1939-…

    2022年5月26日
    61
  • git显示当前分支改动的文件「建议收藏」

    git显示当前分支改动的文件「建议收藏」一个命令显示当前分支与父分支的差异文件。gitcheckoutbranch1gitdiff–name-statusparent_branch1

    2022年8月22日
    28
  • 40 道基础Dubbo 面试题及答案

    40 道基础Dubbo 面试题及答案转载自史上最全40道Dubbo面试题及答案,看完碾压面试官想往高处走,怎么能不懂Dubbo?Dubbo是国内最出名的分布式服务框架,也是Java程序员必备的必会的框架之一。Dubbo更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。下面我为大家准备了一些Dubbo常见的的面试题,一些是我经常问别人的,一些是我过去面试遇到的一些问题,总结给大家,希…

    2022年5月10日
    48

发表回复

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

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