学flask写接口的过程
- 新建一个文件夹myflask
- 在终端pip install flask
- 什么是闭包,一句话说就是,在函数中再嵌套一个函数,并且引用外部函数的变量,这就是一个闭包了。
- 装饰器,其实装饰器就是一个闭包,返回值也是一个函数
- Hello world代码
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hey():
return "hello world"
app.run(host="192.168.101.83")
#host="0.0.0.0" 加上这个就代表任何主机都可以访问这个程序,而不是只有本主机可以
#192.168.101.83是我自己的主机ip地址
- 除了能输出hello world,还可以自己决定输出hey+字符串
- 代码如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "hello world"
@app.route("/<username>")
#装饰器,绑定一个路由。也就是网址后面的内容
def hey_yingong(username):
return "hey %s" % username
#可以在网址后面直接加入字母,直接弹出hey+字符串
app.run(host="127.0.0.1")
#host="0.0.0.0" 加上这个就代表任何主机都可以访问这个程序,而不是只有本主机可以
#192.168.101.83是我自己的主机ip地址
- 如果要将输出的为整形,则在装饰器那儿就设置为int型
代码如下:
@app.route("/<int:username>")
def hey_yingong(username):
return "hey %s" % (username+username)
转换器类型:
string:接受任何不包含斜杠的文本
int:正整数
float:正浮点数
path:类似string,但可以包含斜杠
uuid:接受UUID字符串
- projects的URL尾部有斜杠,about的URL没有尾部斜杠,但是projects访问一个没有斜杠的URL的flask会自动在尾部加上一个斜杠,但是访问about时后面有斜杠的话会报错,所以一般推荐后面末尾不加斜杠
- Flask http方法
GET:请求指定的页面信息,并返回实体主体
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定文档的内容
DELETE:请求服务器删除指定的页面
- Flask重定向
@app.route("/baidu")
def baidu():
return redirect("https://www.baidu.com")
注意:上面要引入函数
from flask import Flask, url_for
from werkzeug.utils import redirect
- 下载并安装postman
在这个页面输入https://bilibili.com就可以得到哔哩哔哩的页面源代码
看到前面又GET点向下箭头还有其他的,常用的几个类型有:
GET:查询,也就是从前端传入查询文件到后端,后端处理请求后到数据库拉取数据反馈给前端,前端再渲染出来。
POST:请求,前端新增了数据,发送json文件到后端,后端接收到之后就“解出来”然后存放到数据库。
PUT:请求和post类似,把通常用在修改数据,对后端来说是在以后的一条数据记录进行更改update参考post的请求。
DELETE:删除请求
详情请见:(17条消息) postman的四种请求:post,get,put,delete_chan_fan的博客-CSDN博客_postman put请求
- 接下来将postman中的GET后面的网址改成我们自己写的pycharm中运行出来的网址,就会得到我们自己写的简单的一个网页的运行结果。
- JSON格式的API
JSON是一种数据格式,是一种在互联网传输中运用最多的数据交换语言,由于它轻便、灵巧,且能从各种语言中完全独立出来,所以成为目前最理想的数据交换语言。
详情请见:(17条消息) JSON和API接口初识_瓦尔登湖-CSDN博客_json接口
def first_post():
my_json = request.get_json()
print(my_json)
get_name=my_json.get("name")
return get_name
在app,run上面添加此代码
然后在
from flask import Flask
后面添加 ,request
然后运行
再打开postman
把GET换成POST
后面输入http://127.0.0.1:5000/test/my/first
选择raw,JSON
输入
{
"name":"张三",
"age":18
}
运行,如果运行结果是 张三 则正确
- 一般传输的时候都是用POST,因为GET是直接传输,不是加密的,不安全,所以最好用POST。
如果要添加GET访问的话,要在取路由那个地方methods=[“POST”,“GET”]
- 登录和退出登录的接口
#登录
@app.route("/try/login",methods=["POST"])
def login():
pass
#检查登录状态
@app.route("/session",methods=["GET"])
def check_session():
pass
#退出登录
@app.route("/try/logout",methods=["GET"])
def logout ():
pass
- 使用会话前必须设置一个密钥
app.secret_key="asdasdasdasdasdsaa"
- 完整代码
from flask import Flask, request, jsonify, session
from werkzeug.utils import redirect
app = Flask(__name__)
app.secret_key = "asdasdasdasdasdsaa"
@app.route("/", methods=["GET"])
def hello_world():
return "hello 音宫"
@app.route("/hey/<username>")
def hey_yingong(username):
return "我是 %s" % (username + username)
@app.route("/my/<float:number>")
def my_number(number):
return "我的数字 %s" % (number + number)
@app.route("/bilibili")
def bilibili():
return redirect("https://www.bilibili.com/")
@app.route("/test/my/first", methods=["POST"])
def first_post():
try:
my_json = request.get_json()
print(my_json)
get_name = my_json.get("name")
get_age = my_json.get("age")
if not all([get_name, get_age]):
return jsonify(msg="缺少参数")
get_age += 10
return jsonify(name=get_name, age=get_age)
except Exception as e:
print(e)
return jsonify(msg="出错了哦,请查看是否正确访问")
# 登录
@app.route("/try/login", methods=["POST"])
def login():
"""
账号 username asd123
密码 password asdasd
:return:
"""
get_data = request.get_json()
username = get_data.get("username")
password = get_data.get("password")
if not all([username, password]):
return jsonify(msg="参数不完整")
if username == "asd123" and password == "asdasd":
# 如果验证通过 保存登录状态在session中
session["username"] = username
return jsonify(msg="登录成功")
else:
return jsonify(msg="账号或密码错误")
# 检查登录状态
@app.route("/session", methods=["GET"])
def check_session():
username = session.get("username")
if username is not None:
# 操作逻辑 数据库什么的
# 数据库里面 把你的头像 等级 金币数量 查询出来
return jsonify(username=username)
else:
return jsonify(msg="出错了,没登录")
# 登出
@app.route("/try/logout", methods=["GET"])
def logout():
session.clear()
return jsonify(msg="成功退出登录!")
app.run(host="127.0.0.1")
# host="0.0.0.0" 加上这个就代表任何主机都可以访问这个程序,
# 而不是只有本主机可以192.168.101.83是我自己的主机ip地址
注意在postman上运行时注意是GET还是POST
详细讲解过程参考:【Flask】快速入门后台写接口【API】【Python3】【无前端】【json格式】_哔哩哔哩_bilibili