flask相關使用

一.手動建立一個乾淨的含有藍圖的flask項目目錄

init.py中python

from flask  import Flask

my_app=Flask(__name__)

def create_app():
   return my_app

在manager.py中mysql

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

結果:這樣運行manager.py腳本就至關於運行了整個appsql

在acc.py中數據庫

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

@acc.route("/acc")
def acc_func():
   return "acc藍圖頁面"

在user.py中json

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

@user.route("/user")
def user_func():
  return "user的藍圖頁面"

init.py中註冊這兩個藍圖flask

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中分別建立兩個藍圖做爲項目的兩個應用session

最終以上操做獲得了一個乾淨的含有藍圖的flask項目目錄結構(flask官方建議)app

二.Flask-SQLAlchemy的使用

1.Flask-SQLAlchemy的導入,配置,以及數據表的建立

init.py中ui

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中spa

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) #{"\u540d\u5b57":"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文件夾

相關文章
相關標籤/搜索