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的代码,所以才会返回请求参数为空,登录成功的情况。
 
我只需要把限制条件范围比较小的放到前面,按照这样的层级关系,就可以实现自己的需求。

 
 
原文地址:https://www.cnblogs.com/chenshengkai/p/11620950.html