一.手动创建一个干净的含有蓝图的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) #{"\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文件夹

flask相关使用的更多相关文章

  1. nginx uwsgi flask相关配置

    一.安装Nginx 在 /home/download下下载压缩包 wget https://nginx.org/download/nginx-1.12.2.tar.gz 解压缩 tar zxvf ng ...

  2. 第四篇 与Flask相关的插件(flask-session、wtforms)

    公司中使用SQL的种方式: 1. 写Django:ORM(关系对象映射), 2. 写Flask和其他:有两种方式: (1) 原生SQL:使用原生SQL有两种选择: A. pymysql (python ...

  3. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  4. Inside Flask - app.py - 2

    Inside Flask - app.py - 2 Flask 初始化参数 Flass 类是 Flask 框架的核心,一个 flask 对象处理视图函数注册.URL规则.模板配置.参数设置等等. 一般 ...

  5. centos+nginx+uwsgi+virtualenv+flask 多站点环境搭建

    环境: centos x64 6.6 nginx 1.6.2 python 2.7.9 uwsgi 2.0.9 virtualenv 12.0.5 flask 0.10.1 正文: 1.安装nginx ...

  6. 【Flask】 利用uWSGI和Nginx发布Flask应用

    因为Flask比较容易上手,之前也拿flask写过几个小项目,不过当时天真地以为只要在服务器上nohup跑一个python脚本就算是成功发布了这个flask项目.实际上这还面临很多问题,比如并发性不好 ...

  7. flask框架詳解

    https://www.cnblogs.com/sss4/p/8097653.html 前言: Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form. ...

  8. PythonWEB框架之Flask

    前言: Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form.Admin.分页.中间件.信号.缓存.ContenType....): Tornado: ...

  9. flask+apache+mod-wsgi部署遇到的坑

    首先,看到这种方式部署,我也有疑问,为什么不用nginx,gunicorn.接手的项目,就先按照前人思路run起来. 线上使用ubuntu系统,apache2,而给我玩耍的测试机是centos6.5, ...

随机推荐

  1. Android菜鸟的成长笔记(20)——IntentService

    前面介绍的Service在官方文档介绍中说Service存在着如下两个问题: 1.A Service is not a separate process. The Service object its ...

  2. In partitioned databases, trading some consistency for availability can lead to dramatic improvements in scalability.

    In partitioned databases, trading some consistency for availability can lead to dramatic improvement ...

  3. Distributed Symmetric Multiprocessing Computing Architecture

    Example embodiments of the present invention includes systems and methods for implementing a scalabl ...

  4. 度小于所述过程:KanboxEnt.exe

    在防火墙管理.见未知的过程"KanboxEnt.exe" 程序信息: 版权声明:本文博主原创文章.博客,未经同意不得转载.

  5. 国产操作系统剽窃Linux内核可耻!

    10月28日,新浪科技发表文章,题为"国产操作系统迎来利好:部委机构正大量採购",读后有感. 如今,国家进入法制时代.政府採购"国产操作系统",似乎成为一种&q ...

  6. PBS 作业调度应用

    PBS(Portable Batch System),最初由 NASA 的 Ames 研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理(Portable Batch Pr ...

  7. WPF 获取鼠标屏幕位置、窗口位置、控件位置

    原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT { public int X; public int Y; public POINT(int x, int ...

  8. Windows中点击“关闭”button发生了什么?

    对于Windows操作,当用户点击"关闭"button时,窗体函数就会收到一个WM_DESTROY消息. 窗体函数应该调用PostQuitMessage(0) 向消息队列插入一个W ...

  9. 执行xcopy命令后出现Invalid num of parameters错误的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在执行一条批处理命令: xcopy /s /i /y C:\ppt D:\Program doc 开始很纳闷,上网一查 ...

  10. maven私服nexus安装

    maven私服nexus安装 1.nexus特性 1.1.nexus私服实际上是一个javaEE的web 系统 1.2.作用:用来管理一个公司所有的jar包,实现项目jar包的版本统一 1.3.jar ...