Flask----应用案例

文章目录

需求

  1. 创建app, 并使用配置文件配置mysql
  2. 创建一个apps目录, 内部创建一个users目录,users目录下创建user蓝图,并注册到app
  3. 为user蓝图配置路由;原生路由/info 返回info.html; restful api 路由/user/mobile 返回json数据。
  4. 为app配置跨域(使用flask_cors)

案例代码

  1. app.py

from flask import Flask
from flask import request, session, current_app, g
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy
from apps.users.user_app import user_app
from apps.users import models
from flask_cors import CORS

app = Flask(__name__)
# 配置app
app.config.from_pyfile("settings.py")
# 初始化数据库连接
db = SQLAlchemy(app)

# api接口, 蓝图中有自己的api对象
api = Api(app)

# 注册蓝图, 蓝图即扩展的应用,内部的路由也会放入url_map
app.register_blueprint(user_app)


if __name__ == "__main__":
    print("xxx:", app.url_map)
    # 配置跨域, 已测试
    CORS(app, supports_credentials=True, 
    origins=["http://localhost:8080",], 
    methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], 
    allow_headers=["x-requested-with", 'content-type', 'authorization', "author"],
    expose_headers="*")

    app.run(host="localhost", port=5000, debug=True)
  1. user_app.py

from flask import request, render_template
from flask import Blueprint
from flask import jsonify

user_app = Blueprint("user", __name__, 
static_folder="static/users",  # 暂时没有办法访问静态文件
template_folder="templates/users")


@user_app.route("/info", methods=["GET", "POST"], endpoint="userInfo")
def userInfo():
    if request.method == "GET":
        return render_template("users/info.html")

    else:
        return "没有页面"


from flask_restful import Api, Resource
# 为蓝图实例化api对象,添加restful api
api = Api(user_app)

class UserResource(Resource):
    def get(self):
        res = jsonify({
            "code": 200,
            "msg": "1733532..."
        })
        return res

api.add_resource(UserResource, "/user/mobile")
  1. manage.py

from app import app, db
from app import user_app
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command("db", MigrateCommand)


if __name__ == "__main__":
    manager.run()
  1. settings.py
# 使用pymysql
import pymysql
pymysql.install_as_MySQLdb()

# 配置数据库, 有如上代码,就不能mysql+pymysql
# SQLALCHEMY_DATABASE_URI = "mysql+pymysql://lauf:lauf123@localhost:3306/"
SQLALCHEMY_DATABASE_URI = "mysql://lauf:lauf123@localhost:3306/flask_625"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

  1. models.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值