zoukankan      html  css  js  c++  java
  • flask相关使用

    一.手动创建一个干净的含有蓝图的flask项目目录

    init.py中

    from flask  import Flask

    my_app=Flask(__name__)

    def create_app():
       return my_app

    在manager.py中

    import app
    if __name__=="__main__":
       my_app=app.create_app()
       my_app.run()

    结果:这样运行manager.py脚本就相当于运行了整个app

    在acc.py中

    from flask import Blueprint
    acc=Blueprint("acc",__name__)

    @acc.route("/acc")
    def acc_func():
       return "acc蓝图页面"

    在user.py中

    from flask import Blueprint
    user=Blueprint("user",__name__)

    @user.route("/user")
    def user_func():
      return "user的蓝图页面"

    init.py中注册这两个蓝图

    from flask  import Flask

    my_app=Flask(__name__)
    from app.views.acc import acc
    from app.views.user import user

    def create_app():
       ###########注册蓝图############
       my_app.register_blueprint(acc)
       my_app.register_blueprint(user)
       ##############################
       return my_app

    结果:在acc.py和user.py中分别创建两个蓝图作为项目的两个应用

    最终以上操作得到了一个干净的含有蓝图的flask项目目录结构(flask官方建议)

    二.Flask-SQLAlchemy的使用

    1.Flask-SQLAlchemy的导入,配置,以及数据表的创建

    init.py中

    from flask import Flask

    ################1.导入SQLAlchemy,并实例化#################
    from flask_sqlalchemy import SQLAlchemy
    db=SQLAlchemy()
    #########################################################

    my_app=Flask(__name__)
    from app.views.acc import acc
    from app.views.user import user

    def create_app():
    #####################数据库配置#########################
       my_app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:@127.0.0.1:3306/day127?charset=utf8"
       # SQLALCHEMY_POOL_SIZE 配置 SQLAlchemy 的连接池大小
       my_app.config["SQLALCHEMY_POOL_SIZE"] = 5
       # SQLALCHEMY_POOL_TIMEOUT 配置 SQLAlchemy 的连接超时时间
       my_app.config["SQLALCHEMY_POOL_TIMEOUT"] = 15
       my_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
       
    ###3.此时的SQLAlchemy与flask没有关系,初始化之后才能绑定关系########
       db.init_app(my_app)
    #########################################################

       #注册项目中的蓝图
       my_app.register_blueprint(acc)
       my_app.register_blueprint(user)
       return my_app

    在model.py中

    from app import db,create_app

    #1.创建表关系类
    # Base=db.Model   #相当于Django中的Model
    class User(db.Model):
       __tablename__='user'
       id=db.Column(db.Integer,primary_key=True)
       name=db.Column(db.String(32),index=True)

    if __name__ == '__main__':
    #2.获取数据库配置  
       my_app=create_app()
       #db.drop_all(app=my_app) #清空继承db.Model的所有数据表
    #3.创建my_app中所有关系表    
       db.create_all(app=my_app)
    #此处涉及离线脚本  

    2.Flask-SQLAlchemy的增删改查

    在user蓝图中

    from flask import Blueprint,jsonify
    user=Blueprint("user",__name__)

    from app import db
    from app.model import User

    ###########向User表中添加数据###########
    @user.route("/useradd")
    def user_func():
       user_obj=User(name="shy")
       db.session.add(user_obj)
       db.session.commit()
       return "user的蓝图页面"

    ###########查询User表中的数据###########
    @user.route("/userlist")
    def userlist():
       res__all=User.query.all()
       res_one=User.query.first()
       # print(res_all) #[<User 1>]
       ret={"名字":res_one.name}
       return jsonify(ret) #{"u540du5b57":"shy"}

    ###########更改User表中的数据###########
    @user.route("/userupdate")
    def userupdate():
       user_obj=User.query.first()
       user_obj.name="jwb"
       db.session.commit()
       return "更改完成"

    ###########删除User表中的数据###########
    @user.route("/userdelete")
    def userdelete():
       user_obj=User.query.first()
       db.session.delete(user_obj)
       db.session.commit()
       return "删除完成"

    3.Flask-Script的使用

    注:使用之前先下载Flask-Script包

    (1)在终端运行启动项目
    import app
    from flask_script import Manager
    my_app=app.create_app()
    manager=Manager(my_app)

    if __name__=="__main__":
       manager.run()
    在终端中(项目目录下)运行:python manager.py runserver即可启动项目

    指定IP和端口启动:python manager.py runserver -h 0.0.0.0 -p 9527
    (2)Flask-Script的其他功能
    import app
    from flask_script import Manager
    my_app=app.create_app()
    manager=Manager(my_app)

    #############################################
    @manager.command
    def add(a):
       return a+a
    #终端输入:python manager.py add 6
    #得到:66

    #############################################
    @manager.command
    def runflask():
       my_app.run()
       return "运行结束"
    #终端输入:python manager.py runflask
    #结果:程序运行结束或退出时打印

    #############################################
    @manager.option("-n","--name",dest="name") #-n 是--name的简写
    @manager.option("-s","--say",dest="adj")
    def open_flask(name,adj):
       return f"{name}真{adj}" #我真好看
    #启动时得到一些值用于配置或其他

    #############################################
    @manager.option("-n","--name",dest="name") #-n 是--name的简写
    @manager.option("-s","--say",dest="adj")
    def open_flask_run(name,adj):
       my_app.run(name,int(adj))
       return f"{name}真{adj}" #我真好看
    #终端输入:python manager.py open_flask_run -n 0.0.0.0 -s 9527
    #结果:程序在http://0.0.0.0:9527/ 上运行

    #############################################
    @manager.option("-n","--name",dest="name") #-n 是--name的简写
    @manager.option("-s","--say",dest="adj")
    def open_flask_run_question(name,adj):
       res=input("真的要启动吗")
       if res=="y":
           my_app.run(name,int(adj))
       else:
           return "不启动拉倒"
    #可以在启动前提问问题,用于配置或其他

    #############################################
    @manager.option("-n","--name",dest="name") #-n 是--name的简写
    @manager.option("-s","--say",dest="adj")
    def open_flask_run_question_moren(name="19.168.13.12",adj=9527):
       res=input("真的要启动吗")
       if res=="y":
           my_app.run(name,adj)
       else:
           return "不启动拉倒"
    #参数可以有默认值
    #############################################

    if __name__=="__main__":
       manager.run()

    4.Flask-Migrate(数据库迁移)

    注:Flask-Migrate一定要基于Flask-Script使用

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

    ##############################
    my_app=app.create_app()
    manager=Manager(my_app)

    Migrate(my_app,db)
    manager.add_command("database",MigrateCommand)
    ##############################

    @manager.command
    def add(a):
       return a+a
    #终端输入:python manager.py add 6
    #得到:66

    if __name__=="__main__":
       manager.run()

    终端运行:

    python manager.py database init
    python manager.py database migrate #相当于Django中的makemigration
    python manager.py database upgrade #相当于Django中的migrate

     

    python manager.py database init 结果:项目中出现一个migrations文件夹

     

     

     

     

     

  • 相关阅读:
    如何列出陣列中大於n的所有元素? (C/C++) (STL)
    為什麼int *ptr = 345;這樣的寫法有問題?
    如何使用STL寫XML轉檔程式? (C/C++) (STL) (Web) (XML)
    如何判斷回文(palindrome) ? (C/C++) (C) (STL)
    如何將int轉string? (C/C++) (C)
    如何將輸入的字串存到記憶體後,再一起印出來? (C/C++) (C)
    如何為程式碼加上行號? (C/C++) (STL)
    如何将字符串前后的空白去除(C/C++) (STL)
    簡單的Linked List實現
    如何將struct塞進vector? (C/C++) (STL)
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/10387470.html
Copyright © 2011-2022 走看看