完善了一下慕课网实战中的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. upload-labs通关集

    upload-labs通关集 环境 第一题 前端js检查 第二题 content-type类型绕过 第三题 黑名单绕过 第四题 .htaccess绕过 第五题 大小写绕过 第六题 空格绕过 第七题 点 ...

  2. Hive分析窗口函数

    数据准备 CREATE EXTERNAL TABLE lxw1234 ( cookieid string, createtime string, --day pv INT ) ROW FORMAT D ...

  3. PYTHON数据类型(进阶)

    PYTHON数据类型(进阶) 一.字符串.列表.字典.元祖.集合的补充 str #captalize 首字母大写,其余小写 s1.capitalize() #swapcase 大小写翻转 s1.swa ...

  4. 谷歌2019 学术指标发榜:CVPR首次进入Top 10,何恺明论文引用最高!

    [导读]今天,谷歌发布了2019最新版学术指标,对收录的会议和期刊的影响力进行排名.AI类的多个顶会进入榜单Top 100,CVPR更是进入前10,而何恺明的"深度残差网络"单篇引 ...

  5. Web安全认证

    一.HTTP Basic Auth 每次请求 API 时都提供用户的 username 和 password. Basic Auth 是配合 RESTful API 使用的最简单的认证方式,只需提供用 ...

  6. Codeforces 1329C - Drazil Likes Heap(堆+贪心)

    题目链接 题意 给出一个高度为 h 的大根堆, 要求弹出其中若干个数后高度变为 g, 并且前后大根堆都是满二叉树. 问新的大根堆所有数之和的最小值, 并要给出一种弹出数的操作序列(节点序号). h, ...

  7. list容器排除重复单词的程序

    #include<iostream> #include<fstream> #include<string> #include<algorithm> #i ...

  8. E - E CodeForces - 1100E(拓扑排序 + 二分)

    E - E CodeForces - 1100E 一个n个节点的有向图,节点标号从1到n,存在m条单向边.每条单向边有一个权值,代表翻转其方向所需的代价.求使图变成无环图,其中翻转的最大边权值最小的方 ...

  9. SWUST OJ 1075 求最小生成树(Prim算法)

    求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...

  10. Redis 设计与实现笔记 - SDS

    Redis 中的字符串没有使用 C语言中的字符指针(char *),而是使用了自定义的结构 sds. 文件: sds.h sds.c 结构: struct sdshdr { int len; // 填 ...