zoukankan      html  css  js  c++  java
  • Flask接口开发过程中的心得2019.10.03

    完善了一下慕课网实战中的post接口开发,得到了一些进步:

    代码如下:

     1 #coding=utf-8
     2 from flask import Flask
     3 from flask import request
     4 from flask import jsonify
     5 app = Flask(__name__)
     6 
     7 # GET请求接口: https://192.168.1.101:5000/
     8 @app.route('/')
     9 def Home():
    10     data = {
    11         "username": "cskczy",
    12         "password": "Aa111111"
    13     }
    14     return jsonify(data)
    15 
    16 # GET请求接口: https://192.168.1.101:5000/passport/user/login
    17 @app.route('/passport/user/login', methods=['GET'])
    18 def Login():
    19     username = request.args.get("username")
    20     password = request.args.get("password")
    21     if username and password:
    22         data = {
    23             "username": username,
    24             "password": password,
    25             "code": "200",
    26             "message": "登录成功"
    27         }
    28     else:
    29         data = {
    30             "code": "400",
    31             "message": "请传递正确的参数"
    32         }
    33     return jsonify(data)
    34 
    35 # POST请求接口: https://192.168.1.101:5000/passport/user/post_login
    36 @app.route('/passport/user/post_login', methods=['POST'])
    37 def post_login():
    38     request_method = request.method
    39     if request_method == 'POST':
    40         username = request.form.get('username')
    41         password = request.form.get('password')
    42         if username is None or password is None:
    43             data = {
    44                 "code": 400,
    45                 "message": "用户名或密码参数不存在"
    46             }
    47         elif username == "" or password == "":
    48             data = {
    49                 "code": 400,
    50                 "message": "用户名或密码为空"
    51             }
    52         elif username == username and password == password:
    53             data = {
    54                 "username": username,
    55                 "password": password,
    56                 "code": 200,
    57                 "message": "登陆成功"
    58             }
    59     else:
    60             data = {
    61                 "code": "400",
    62                 "message": "请求不合法"
    63             }
    64     return jsonify(data)
    65 
    66 
    67 if __name__ == "__main__":
    68     app.run(host="0.0.0.0", port=5000, debug=False)

    今晚在进行POST接口编写的时候,没有注意到elif之间的关系,后来去查了一下资料,进一步了解了if和elif,以及elif自身之间存在的那层关系。

    举个栗子:

    1 a = 5
    2 if a < 6:      #条件1
    3     print(1)
    4 if a < 7:      #条件2
    5     print(2)
    6 else:
    7     print(3)

    结果:条件1和条件2是独立的,第一次判断a的值小于6,所以打印出数字1,第二次判断a的值小于7,所以打印出2。如果所有的if语句都判断失败,才会执行else后的语句,否则else语句不执行。

    条件1和条件2的结果都会打印。

     如果条件2修改为elif,结果就不同了

    1 a = 5
    2 if a < 6:      #条件1
    3     print(1)
    4 elif a < 7:    #条件2
    5     print(2)
    6 else:
    7     print(3)

    这次条件1和条件2是相关的,也就是说,如果条件1判断成功的话,条件2就不会继续判断了。反过来,如果条件1判断失败,那么就会继续判断条件2.如果条件1和条件2都判断失败,那么则执行else里面的语句。

     结果很明显就是只会打印出1。

    当然把if和elif混合起来也是可以的,只不过这样看起来怪怪的,可读性也差

    1 a = 5
    2 if a < 6:
    3     print(1)
    4 elif a < 4:
    5     print(2)
    6 if a < 7:
    7     print(3)
    8 else:
    9     print(4)

     结果是:1,3

    应用场景:

    如果你只想执行一个代码块,那么用if-elif-else结构吧;

    如果你要运行多个代码块,那么就用多个if吧。(多条件同时满足)

    我今晚遇到的疑惑如下:

    刚开始把模块2放在了模块1的上面。所以在postman进行接口参数请求的时候,

    我的username和password参数为空,却返回了:

    {
    "code": 200,
    "message": "登陆成功",
    "password": " ",
    "username": " "
    }
     
    显示这与我预期的结果不符合,我要的是username或password任意一个为空的时候,返回:
    {
    "code": 400,
    "message": "用户名或密码为空"
    }
     
    现在我知道了因为模块2在模块1之前,模块2的代码逻辑是允许username或password为空的,
    模块2执行后,因为是elif的缘故,并不会再去执行模块1的代码,所以才会返回请求参数为空,登录成功的情况。
     
    我只需要把限制条件范围比较小的放到前面,按照这样的层级关系,就可以实现自己的需求。

     
     
  • 相关阅读:
    【转载】Dom篇
    【转载】Eclipse自动编译问题
    RabbitMQ
    分布式消息中间件
    分布式限流算法
    分布式限流和熔断
    数据库中间件
    redis 集群原理
    redis 哨兵模式(读写分离)
    redis 和memcache 区别
  • 原文地址:https://www.cnblogs.com/chenshengkai/p/11620950.html
Copyright © 2011-2022 走看看