N29※flask 编写后端api

1> 第一个程序

from flask import  Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "hello,world@"

2> 路由配置

① 使用装饰器

@app.route(url_name, methods)

② 使用api配置

app.add_url_rule(url, url_name, view_name)  # view_name为视图函数名

③ 路由匹配规则

@app.route('/')  # 匹配整个文字
@app.route('/user/<username>')  # 传递参数
@app.route('/post/<int:post_id>')  # 指定参数的类型
类型描述
string接收任何不包含斜杠的文本(默认值)
int正整数
float正浮点数
path类似string,可以包含斜杠
uuid接收UUID字符串

④ 获取传递参数的值

@app.route("/hey/<username>")
def hey(username):
    return "我是 %s" % (username)

⑤ 获取页面传递的值

from flask import request
@app.route("/get/")
def hey():
    res = request.args
    name = res.get('name')
    return "我是 %s" % (name)

3> 全局变量

from flask import Flask, render_template, g

app = Flask(__name__)

@app.before_request
def before_request():
    # 全局变量
    g.user = '张三'

@app.route("/get")
def hey():
    return  g.user

4> 解决中文为Unicode的问题

app.config["JSON_AS_ASCII"] = False

5> 范例

from flask import Flask,request,jsonify,session,g  # pip install flask==1.1.4
from gevent import pywsgi  # pip install gevent==22.10.2
 
app = Flask(__name__)
app.secret_key = "~I9wzDOqSVe#3"
# 读取数据
@app.route('/get',methods = ['get'])
def Projectlist():
    name = request.values.get('name')  # 获取get接口的参数name保存在name中
    # name = request.args.get('name')
    # 准备构造返回的json
    project = {  
        "msg":"ok",
        "status":200,
        "data":{
            "name":name
        }
    }
    return jsonify(project)#把构造的json格式返回

# 登录
@app.route('/login',methods = ['POST'])
def post():
    # data = request.stream.read()
    data = request.get_json()
    username = data.get("username")
    password = data.get("password")

    if not all([username, password]):
        return jsonify(msg="参数不完整")

    if username == "asd" and password == "123456":
        # 如果验证通过 保存登录状态在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)
    else:
        return jsonify(msg="出错了,没登录")

# 登出
@app.route("/logout", methods=["GET"])
def logout():
    session.clear()
    return jsonify(msg="退出登录!")

if __name__ == '__main__':
    server = pywsgi.WSGIServer(('127.0.0.1',5000),app)
    server.serve_forever()

6> 将python脚本添加到systemctl服务

vim /lib/systemd/system/fapi.service
[Unit]
Description=Python Service
After=multi-user.target
[Service]
WorkingDirectory=/path
User=root
Type=idle
ExecStart=/usr/bin/python3 /path/server.py
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable fapi.service
sudo systemctl start fapi.service

© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享