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

代码如下:

 #coding=utf-8
from flask import Flask
from flask import request
from flask import jsonify
app = Flask(__name__) # GET请求接口: https://192.168.1.101:5000/
@app.route('/')
def Home():
data = {
"username": "cskczy",
"password": "Aa111111"
}
return jsonify(data) # GET请求接口: https://192.168.1.101:5000/passport/user/login
@app.route('/passport/user/login', methods=['GET'])
def Login():
username = request.args.get("username")
password = request.args.get("password")
if username and password:
data = {
"username": username,
"password": password,
"code": "",
"message": "登录成功"
}
else:
data = {
"code": "",
"message": "请传递正确的参数"
}
return jsonify(data) # POST请求接口: https://192.168.1.101:5000/passport/user/post_login
@app.route('/passport/user/post_login', methods=['POST'])
def post_login():
request_method = request.method
if request_method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
if username is None or password is None:
data = {
"code": 400,
"message": "用户名或密码参数不存在"
}
elif username == "" or password == "":
data = {
"code": 400,
"message": "用户名或密码为空"
}
elif username == username and password == password:
data = {
"username": username,
"password": password,
"code": 200,
"message": "登陆成功"
}
else:
data = {
"code": "",
"message": "请求不合法"
}
return jsonify(data) if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=False)

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

举个栗子:

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

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

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

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

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

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

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

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

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

 
 

Flask接口开发过程中的心得2019.10.03的更多相关文章

  1. 获取图书isbn信息 共享图书开发 图书信息接口开发过程中的心得体会

    最近做一个图书共享的项目,需要用户扫一扫书籍后面的一维码,获取到书籍的isbn号码,然后通过这个isbn号码能够直接获取到这本书的名字.简介.价格.图片等信息. 于是百度搜了下,之前很多的豆瓣的接口, ...

  2. 小程序红包开发跳坑记 微信小程序红包接口开发过程中遇到的问题 微信小程序红包开发

    现在做小程序的越来越多,商家推广也是一个瓶颈,谁不发点红包,都很难找到人来用你的微信小程序了.于是不管你开发什么小程序功能,你或多或少都要用到小程序来发红包吧.  我们自己之前做公众号发红包,做了两三 ...

  3. thinkphp在app接口开发过程中的通讯安全认证

    对于我们写好的接口,如果不经过安全认证就可以直接访问的话,则将对我们网站产生非常大的安全隐患,一些hack可能直接用你的接口去操作数据库,后果无法估量.那么如何才能进行有效的安全验证呢? 这里我采用了 ...

  4. webServices接口开发过程中项目启动遇到的错误org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 422; schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-bean

    org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 422; schema_reference.4: Failed to read ...

  5. 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的

    微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的   最近公司在开发一个小程序红包系统,客户抢到红包需要提现.也就是通过小程序来给用户发红包. 小程序如何来发红包呢?于是我想 ...

  6. 一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法

    这篇文章也许会不定时更新,主要记录这段时间内自己遇到的angularjs学习开发的一些问题的解决办法.本文以摘抄为主,主要目的还是将自己遇到的困惑在各个地方查到的解决办法的汇总,给自己留个备忘吧. 1 ...

  7. iOS开发过程中使用Core Data应避免的十个错误

    原文出处: informit   译文出处:cocoachina Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据.对很多开发者来说,Core Data比较容易入手,但很 ...

  8. 记一次开发过程中,iview遇到的一些坑以及解决办法

    写在开头:本次项目采用的是vue2.0+iview3.0,最近公司没啥事,来总结一下开发过程中遇到的问题. 1.Modal关闭问题 需求背景:modal框里面是个form表单,点击确定之后,先验证fo ...

  9. 【Java基础】Java开发过程中的常用工具类库

    目录 Java开发过程中的常用工具类库 1. Apache Commons类库 2. Guava类库 3. Spring中的常用工具类 4. 其他工具 参考 Java开发过程中的常用工具类库 1. A ...

随机推荐

  1. Partition Array into Disjoint Intervals

    2020-02-10 22:16:50 问题描述: 问题求解: 解法一:MultiSet O(nlog) 看了下数据规模,第一个想到的是multiset,肯定可以ac的,就直接敲了出来. public ...

  2. DL 调参经验

    2019-10-20 11:45:54 数据侧 1.在数据集很大的情况下,不要立马跑全量数据.可以现在小数据集上进行测试,估算一下运行时间. 2.数据shuffle和augmentation,训练之前 ...

  3. 六、深浅拷贝与while循环

    一.深浅拷贝 3.1 浅copy: 浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表 用法: list1=[ 'egon', 'lxx', [1,2] ] list2=list1. ...

  4. matplotlib.pyplot库函数关于坐标轴显示的支持

    matplotlib.pyplot库函数关于坐标轴显示的支持 https://blog.csdn.net/Stark_595/article/details/80787005?depth_1-utm_ ...

  5. Mysql性能优化:为什么你的count(*)这么慢?

    导读 在开发中一定会用到统计一张表的行数,比如一个交易系统,老板会让你每天生成一个报表,这些统计信息少不了 sql 中的count函数. 但是随着记录越来越多,查询的速度会越来越慢,为什么会这样呢?M ...

  6. AQS源码解析

    文大篇幅引用自HongJie大佬的一行一行源码分析清楚AbstractQueuedSynchronizer,这只是一篇简单的个人整理思路和总结(倒垃圾),如果觉得有些难懂的话,不要犹豫也不要疑惑,很明 ...

  7. 展示html/javascript/css------Live-Server

    Live-server简介 这是一款带有热加载功能的小型开发服务器.用它来展示你的HTML / JavaScript / CSS,但不能用于部署最终的网站. 官网地址:https://www.npmj ...

  8. Linux(Ubuntu)与windows实现文件共享

    步骤:1.从网上下载VMware和Ubuntu的镜像文件 2.在虚拟机上安装Ubuntu系统 3.在安装好的系统中安装VMware tools 实现文件共享    4.在VMware中设置与windo ...

  9. E 比赛评分

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,128m 问题描述 Lj​最近参加一个选秀比赛,有N个评委参加了这次评分,N是奇数.评委编号为1到N.每位评委给Lj​的分数是 ...

  10. 【tensorflow2.0】自动微分机制

    神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情. 而深度学习框架可以帮助我们自动地完成这种求梯度运算. Tensorflow一般使用梯度磁带tf.Gradi ...