zoukankan      html  css  js  c++  java
  • 7-4 python 接口开发(提供mock服务)

    1、登录接口开发(数据存在数据库中)  接口开发做mock(模拟功能)

      tools.py

    import pymysql
    def my_db(sql):
        conn = pymysql.connect(host='xxx.xx.x.xx',user='jxz',password='123456',
                        db='jxz',port=3306,charset='utf8',autocommit=True)
        cur = conn.cursor(pymysql.cursors.DictCursor)
        cur.execute(sql)
        res = cur.fetchone() #{'username':'nhy'}  {}
        cur.close()
        conn.close()
        return res
    
    import hashlib
    def my_md5(s,salt=''):
        s = s+salt
        news = str(s).encode()
        m = hashlib.md5(news)
        return m.hexdigest()
    import flask
    import tools
    import json
    server = flask.Flask(__name__)
    #新建一个服务,把当前这个python文件当做一个服务
    
    
    # 装饰器  在参数中传入请求接口 路径  和 方法
    # 也可以指定请求方法既可以是get方法也可以是post方法  methods=['get','post']
    @server.route('/login',methods=['get'])
    def login():  # 定义一个登录的接口
        uname = flask.request.values.get('username')  # 从请求参数中获取请求参数 username
        pd = flask.request.values.get('passwd')  # 从请求参数中获取请求参数 passwd
        # 从数据库中查询到输入的用户名的所有信息
        sql = 'select * from app_myuser where username="%s"'%uname
        res = tools.my_db(sql)  # 调用tools下的mysql函数,将sql传入进去,获取当前请求用户的一条信息
        if res:  # 判断如果返回该用户的信息,则执行下面的操作
            # 1、判断用户密码是否正确
            if tools.my_md5(pd) == res.get('passwd'):
                # 调用tools下的my_md5函数,将输入的密码进行加密后,跟数据库中返回的passwd密码进行对比
                # 如果输入的密码加密后跟数据库中的秘密一直,提示登录成功
                res = {"code":0,"msg":"登录成功!"}
            else:  # 如果密码不一致,提示密码错误
                res = {"code":1,"msg":"密码错误!"}
        else:  # 如果数据库没有该用户的信息,告知用户不存在
            res = {'code':2,"msg":"用户不存在"}
        return json.dumps(res,ensure_ascii=False,indent=4)
        # 将结果返回,因为res是从数据库中返回的元组列表格式
        # 需要使用json.dumps将字典转成字符串json格式
    
    # 启动一个服务,如果指定host = '127.0.0.1',则只能在本地访问
    # 如果指定host = '0.0.0.0' 则只要是一个局域网内的所有电脑使用ip:port/路径都能访问此接口
    # 指定启动服务的端口号,如果没有写端口号,则使用默认的端口号
    # 指定参数debug=True 则增删改这个服务中的接口时不需要重新启动服务
    # 注意:服务只能启动一次,启动多次会报错
    server.run(host='0.0.0.0',port=8999,debug=True)
    #ip:8000/login
    #127.0.0.1

    2、登录、注册接口开发(数据存在redis中)

    import flask
    import tools
    import json,redis
    import random
    
    server = flask.Flask(__name__)
    #新建一个服务,把当前这个python文件当做一个服务
    
    ip = '118.24.3.40'
    password='HK139bc&*'
    r = redis.Redis(host=ip,password=password,port=6379,db=10,
                    decode_responses=True) # 连接redis
    
    @server.route('/login',methods=['get'])
    def login():
        """
    登录接口 数据存在redis中
        :return: 返回json格式的登录结果
        """
        uname = flask.request.values.get('username')
        pd = flask.request.values.get('passwd')
        # 定义一个key 'nhy:%s' %unmame  key值为从外面输入的用户名,前面加  nhy:  表示在一个nhy的文件夹中
        key='nhy:%s'%uname
        res = r.get(key)   # 从redis中获取的输入的key的值
        if res:  # 判断如果存在用户名
            res = json.loads(res)   # 将从redis中获取到的值转换成字典
            # 判断输入的密码加密后跟从redis中获取的密码一致
            if tools.my_md5(pd) == res.get('passwd'):
                res = {"code":0,"msg":"登录成功!"}
            else:
                res = {"code":1,"msg":"密码错误!"}
        else:
            res = {'code':2,"msg":"用户不存在"}
        # 将返回的结果转换成json字符串格式
        return json.dumps(res,ensure_ascii=False,indent=4)
    
    @server.route('/reg',methods=['post'])
    def reg():
        """
    注册接口,将注册信息写入redis中
        :return: 返回注册的信息 json格式
        """
        uname = flask.request.values.get('username')
        pd = flask.request.values.get('passwd')
        cpd = flask.request.values.get('cpwd')
        key='nhy:%s'%uname  # 定义一个key
        res = r.get(key)   # 获取redis中key的值
        if res:  # 判断用户是否存在
            res = {'code': 2, "msg": "用户已存在"}
        else:  # 用户不存在
            md5_password  = tools.my_md5(pd)  # 调用tools中的my_md5函数将输入的密码进行加密
            # 定义一个字典,需要存入redis中的value值
            res = {'id':random.randint(100,9999),'username':uname,'passwd':md5_password,'is_admin':1}
            # 将值写入redis中,key为'nhy:%'%uname  value值为:res  需要将res转换成json串  因为redis中只能存字符串格式
            r.set('nhy:%s'%uname,json.dumps(res))
            res = {"code":0,"msg":"注册成功!"}
        return json.dumps(res,ensure_ascii=False,indent=4)  # 返回res  需要转成json格式
    
    server.run(host='0.0.0.0', port=8999, debug=True)
  • 相关阅读:
    实现CSS圆环的5种方法(小结)
    父组件向子组件传递数组格式数据
    Vue里的data声明方式:data{},data(){}
    浏览器输入 URL 回车之后发生了什么?
    vue中跳转链接
    Github上 10 个开源免费且优秀的后台控制面板
    vueelementadmin之修改侧边栏的icon图标以及图标颜色
    vue组件库选择pc端和手机端
    8月24日学习日志
    8月28日学习日志
  • 原文地址:https://www.cnblogs.com/hushaoyan/p/10191096.html
Copyright © 2011-2022 走看看