今天我们继续学习如何使用Flask开发POST接口:用户注册接口和用户登录接口。

request接收参数

当我们在页面发出一个POST请求,请求传到服务器时,需要如何拿到当前请求的数据呢?在Flask可以使用 request 来接收请求参数。

request导入方式

from flask import request

使用 request 来接收参数的方式有多种,比如:

request.form:用于接收表单参数
request.args:用于接收GET参数
request.json:用于接收JSON参数
request.values:获取所有参数(表单参数+GET参数)
request.file:用于接收文件

当然 request 还有不少其他属性,这里就不一一列出了,我们在这里使用了 request.jsonrequest.values 来开发POST接口,如果要拿到具体某个参数的值,则是通过 request.json.get("key")request.values.get("key") 来完成。

用户注册接口

@app.route("/register", methods=['POST'])
def user_register():
username = request.json.get("username").strip() # 用户名
password = request.json.get("password").strip() # 密码
sex = request.json.get("sex", "0").strip() # 性别,默认为0(男性)
telephone = request.json.get("telephone", "").strip() # 手机号,默认为空串
address = request.json.get("address", "").strip() # 地址,默认为空串
if username and password and telephone:
if username == "wintest":
return jsonify({"code": 2002, "msg": "用户名已存在!!!"})
elif not (sex == "0" or sex == "1"):
return jsonify({"code": 2003, "msg": "输入的性别只能是 0(男) 或 1(女)!!!"})
elif not (len(telephone) == 11 and re.match("^1[3,5,7,8]\d{9}$", telephone)):
return jsonify({"code": 2004, "msg": "手机号格式不正确!!!"})
else:
return jsonify({"code": 0, "msg": "恭喜,注册成功!"})
else:
return jsonify({"code": 2001, "msg": "用户名/密码/手机号不能为空,请检查!!!"})

在这里,我们接收参数是通过 request.json.get("key") 来实现,在请求的时候,因为直接在浏览器上输入网址访问资源都是GET方式,所以我们可以通过其他工具来模拟,如Postman、Fiddler都可以。

正则表达式 "^1[3,5,7,8]\d{9}$" 简单分析:

^ 表示一个字符串的开始

1 表示第一个字符是数字1

[3,5,7,8] 表示第二个字符只是数字 3/5/7/8 中的一个

\d{9} 表示后面后面只能匹配数字,且只能有9位数字

$ 表示一个字符串的结束

注意:该正则表达式是一个不完全的手机号验证,在这里只能较简单的验证手机号的合法性。

通过Fiddler发送请求模拟:

注意,在这里因为我们没有操作数据库,所以只是返回了注册成功的信息,没有做其他处理。后面引入数据库的时候,应该还需要做其他处理,比如将注册用户信息插入到数据库中,检查 用户/手机号 是否已注册。

用户登录接口

@app.route("/login", methods=['POST'])
def user_login():
username = request.values.get("username")
password = request.values.get("password")
if username and password:
if username == "wintest" and password == "123456":
return jsonify({"code": 0, "msg": "恭喜,登录成功!"})
return jsonify({"code": 1002, "msg": "用户名或密码错误!!!"})
else:
return jsonify({"code": 1001, "msg": "用户名或密码不能为空!!!"})

在这里,我们接收参数是通过 request.values.get("key") 来实现,因为使用了 request.values,那么我们的请求头参数中,Content-Type参数就不能用 application/json 了,我们可以使用表单提交的格式:application/x-www-form-urlencoded ,而 body 中参数的格式为:key1=value1&key2=value2

这里也可以把请求数据写到请求路径下:

OK,以上我们使用Flask开发了2个简单的POST请求接口,但并没有连接到数据库进行操作,比如用户注册/登录接口中,验证的用户名都是固定的,不够灵活。下一节,我们将引入数据库来进一步完善。

源码附上:

from flask import Flask, jsonify, request

app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False # jsonify返回的中文正常显示 @app.route("/register", methods=['POST'])
def user_register():
username = request.json.get("username").strip() # 用户名
password = request.json.get("password").strip() # 密码
sex = request.json.get("sex", "0").strip() # 性别,默认为0(男性)
telephone = request.json.get("telephone", "").strip() # 手机号,默认为空
address = request.json.get("telphone", "").strip() # 地址,默认为空
if username and password and telephone:
import re
if username == "wintest":
return jsonify({"code": 2002, "msg": "用户名已存在!!!"})
elif not (sex == "0" or sex == "1"):
return jsonify({"code": 2003, "msg": "输入的性别只能是 0(男) 或 1(女)!!!"})
elif not (len(telephone) == 11 and re.match("^1[3,5,7,8]\d{9}$", telephone)):
return jsonify({"code": 2004, "msg": "手机号格式不正确!!!"})
else:
return jsonify({"code": 0, "msg": "恭喜,注册成功!"})
else:
return jsonify({"code": 2001, "msg": "用户名/密码/手机号不能为空,请检查!!!"}) @app.route("/login", methods=['POST'])
def user_login():
username = request.values.get("username")
password = request.values.get("password")
if username and password:
if username == "wintest" and password == "123456":
return jsonify({"code": 0, "msg": "恭喜,登录成功!"})
return jsonify({"code": 1002, "msg": "用户名或密码错误!!!"})
else:
return jsonify({"code": 1001, "msg": "用户名或密码不能为空!!!"}) if __name__ == '__main__':
app.run()

使用Flask开发简单接口(2)--POST请求接口的更多相关文章

  1. 使用Flask开发简单接口(5)--数据加密处理

    前言 在之前开发的接口中,我们设计把用户信息存储到数据库时,没有对数据进行加密处理,为了提高下安全性,我们今天就学习下,如何对用户数据进行加密加盐处理. MD5加密加盐 MD5加密 MD5是常用的一种 ...

  2. 使用Flask开发简单接口(1)--GET请求接口

    前言 很多想学习接口测试的同学,可能在最开始的时候,常常会因没有可以练习的项目而苦恼,毕竟网上可以练习的接口项目不多,有些可能太简单了,有些可能又太复杂了,或者是网上一些免费接口请求次数有限制,最终导 ...

  3. 使用Flask开发简单接口(3)--引入MySQL

    前言 前面的两篇文章中,我们已经学习了通过Flask开发GET和POST请求接口,但一直没有实现操作数据库,那么我们今天的目的,就是学习如何将MySQL数据库运用到当前的接口项目中. 本人环境:Pyt ...

  4. 使用Flask开发简单接口(4)--借助Redis实现token验证

    前言 在之前我们已开发了几个接口,并且可以正常使用,那么今天我们将继续完善一下.我们注意到之前的接口,都是不需要进行任何验证就可以使用的,其实我们可以使用 token ,比如设置在修改或删除用户信息的 ...

  5. 使用Flask开发简单接口

    作为测试人员,在工作或者学习的过程中,有时会没有可以调用的现成的接口,导致我们的代码没法调试跑通的情况. 这时,我们使用python中的web框架Flask就可以很方便的编写简单的接口,用于调用或调试 ...

  6. andriod开发,简单的封装网络请求并监听返回.

    一.为什么封装 因为android 4.0 以后的发送网络请求必须要放到异步线程中,而异步线程必须跟handle合作才能更新主线程中的UI,所以建议用一个类继承handler来异步处理网络请求. 二. ...

  7. python接口自动化根据请求接口类型进行封装

    根据不同的请求类型(GET/POST)进行接口请求封装 import requests import json class RunMain: def __init__(self, url, metho ...

  8. 动态生成简约MVC请求接口|抛弃一切注解减少重复劳动吧

    背景 目前创建一个后端请求接口给别人提供服务,无论是使用SpringMVC方式注解,还是使用SpringCloud的Feign注解,都是需要填写好@RequestMap.@Controller.@Pa ...

  9. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...

随机推荐

  1. 【Linux】Linux常用命令及操作 (一)

    一.Linux简介 二.Linux基础命令 三.工作常用命令 --------------------------------------------------------------------- ...

  2. MYSQL 之 JDBC(五): 增删改查(三)PreparedStatement

    是Statement的子接口,可以传入带占位符的sql语句,并且提供了补充占位符变量的方法. 使用Statement需要进行拼写SQL语句,很辛苦,很容易出错. 引号的问题处理很复杂,不利于维护. 可 ...

  3. 数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关

    1.数据概览 第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据) i ...

  4. 数据可视化之DAX篇(十四)DAX函数:RELATED和RELATEDTABLE

    https://zhuanlan.zhihu.com/p/64421378 Excel中知名度最高的函数当属VLOOKUP,它的确很有用,可以在两个表之间进行匹配数据,使工作效率大大提升,虽然它也有很 ...

  5. MySQL数据库修改表名

    修改表名 例:把表user 修改为tenant,SQL如下: rename table user to tenant:

  6. [Cordova-IOS]JavaScript与Swift交互

    [Cordova-IOS]Swift调用JavaScript中的函数 概述 Cordova中,通过插件的形式可以实现JavaScript与Swift的交互,关于Cordova插件的定义以及Swfit如 ...

  7. P1433 吃奶酪(洛谷)状压dp解法

    嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加 ...

  8. mysql 联合唯一

    CREATE TABLE `NewTable` ( `id` int NOT NULL , `name` varchar(255) NULL , `phone` varchar(255) NULL , ...

  9. vue学习(六) 事件修饰符 stop prevent capture self once

    //html <div id="app"> <div @click="divHandler" style="height:150px ...

  10. Image Processing Using Multi-Code GAN Prior, CVPR2020

    论文:Image Processing Using Multi-Code GAN Prior, CVPR2020 代码:https://github.com/genforce/mganprior 这是 ...