学flask并尝试写接口的过程

学flask写接口的过程

  1. 新建一个文件夹myflask
  2. 在终端pip install flask
  3. 什么是闭包,一句话说就是,在函数中再嵌套一个函数,并且引用外部函数的变量,这就是一个闭包了。
  4. 装饰器,其实装饰器就是一个闭包返回值也是一个函数
  5. 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地址

  1. 除了能输出hello world,还可以自己决定输出hey+字符串
  2. 代码如下:


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地址

  1. 如果要将输出的为整形,则在装饰器那儿就设置为int型

代码如下:

@app.route("/<int:username>")
def hey_yingong(username):
    return "hey %s" % (username+username)

转换器类型:

string:接受任何不包含斜杠的文本

int:正整数

float:正浮点数

path:类似string,但可以包含斜杠

uuid:接受UUID字符串

  1. projects的URL尾部有斜杠,about的URL没有尾部斜杠,但是projects访问一个没有斜杠的URL的flask会自动在尾部加上一个斜杠,但是访问about时后面有斜杠的话会报错,所以一般推荐后面末尾不加斜杠
  2. Flask http方法

GET:请求指定的页面信息,并返回实体主体

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT:从客户端向服务器传送的数据取代指定文档的内容

DELETE:请求服务器删除指定的页面

  1. Flask重定向

@app.route("/baidu")
def baidu():
    return redirect("https://www.baidu.com")

注意:上面要引入函数

from flask import Flask, url_for
from werkzeug.utils import redirect

  1. 下载并安装postman

网址:下载邮递员|免费开始使用 (postman.com)

在这个页面输入https://bilibili.com就可以得到哔哩哔哩的页面源代码

看到前面又GET点向下箭头还有其他的,常用的几个类型有:

GET:查询,也就是从前端传入查询文件到后端,后端处理请求后到数据库拉取数据反馈给前端,前端再渲染出来。

POST:请求,前端新增了数据,发送json文件到后端,后端接收到之后就“解出来”然后存放到数据库。

PUT:请求和post类似,把通常用在修改数据,对后端来说是在以后的一条数据记录进行更改update参考post的请求。

DELETE:删除请求

详情请见:(17条消息) postman的四种请求:post,get,put,delete_chan_fan的博客-CSDN博客_postman put请求

  1. 接下来将postman中的GET后面的网址改成我们自己写的pycharm中运行出来的网址,就会得到我们自己写的简单的一个网页的运行结果。
  2. 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

}

运行,如果运行结果是  张三  则正确

  1. 一般传输的时候都是用POST,因为GET是直接传输,不是加密的,不安全,所以最好用POST。

如果要添加GET访问的话,要在取路由那个地方methods=[POST,GET]

  1. 登录和退出登录的接口


#登录
@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

  1. 使用会话前必须设置一个密钥

app.secret_key="asdasdasdasdasdsaa"

  1. 完整代码

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值