以下是flask的一些功能实现代码,适合有开发基础的人员学习。
falsk基本模块
from flask import Flask
# flask 在当前文件运行,当前模块为项目目录
app = Flask(__name__)
@app.route('/')
# 视图函数,一定要有返回
def hello_world(): # put application's code here
return 'Hello World!'
# 添加一个路由和视图函数
@app.route('/index/')
def index():
return 'Index 首页'
if __name__ == '__main__':
# 启动服务器
app.run()
flask
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | |__init__.py| | |
| | |models.py| | |
| | |views.py| | |
| |app.py| | | |
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
return app
views.py
# 路由+视图函数
from flask import Blueprint
from .models import *
# 创建蓝图
blue=Blueprint('user',__name__)
blue2=Blueprint('product',__name__)
@blue.route('/')
def app():
return 'index'
@blue.route('/goods/')
def index():
return 'index'
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
Flask 蓝图
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |models.py| | |
| | |views.py| | |
| |app.py| | | |
home. html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>首页</h2>
<hr/>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h2>Index</h2>
<hr>
<p>name:{{ name }}</p>
<p>age:{{ age }}</p>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h2>登陆</h2>
<hr/>
<form action="" method="post">
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="password">
</p>
</form>
</body>
</html>
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
return app
views.py
# 路由+视图函数
from flask import Blueprint, render_template, jsonify, make_response, redirect, url_for,request
# from .models import *
# 创建蓝图
blue=Blueprint('user',__name__)
# blue2=Blueprint('product',__name__)
@blue.route('/')
def app():
return 'index'
# @blue.route('/goods/')
# def index():
# return 'index'
@blue.route('/string/<string:username>/')
def get_string(username):
print(type(username))
return username
# methods:请求方式
@blue.route('/methods/',methods=['GET','POST'])
def get_methods():
# print(request.methods)
# print(request.args)
return 'methods'
# request:请求方式
@blue.route('/request/',methods=['GET','POST'])
def get_request():
pass
print(request.method)
print(request.args)
print(request.form)
print(request.cookies)
print(request.path)
print(request.url)
print(request.base_url)
print(request.host_url)
print(request.remote_addr)
print(request.files)
print(request.headers)
print(request.user_agent)
return 'request ok!'
# Response:服务器向客户端发送的响应
@blue.route('/response/',methods=['GET','POST'])
def get_response():
pass
# 响应的方式
# 1.返回字符串
# return 'response OK!'
# 2.模板渲染
# return render_template('index.html',name='张三',age=22)
# 3.返回json数据(前后端分离)
# data={
# 'name':'李四',
# 'age':18
# }
# return data
# jsonify 将字典转换成字符串
# return jsonify(data)
# 自定义Response对象
html=render_template('index.html',name='张三',age=22)
res=make_response()
# Redirect:重定向
@blue.route('/redirect/')
def make_redirect():
pass
# 重定向的几种方法
# return redirect('https://www.baidu.com')
# return redirect('/response/')
# url_for('蓝图名称.视图函数名')
# ret=url_for('user.get_response')
# print('ret:',ret)
# return redirect(ret)
# ret2=url_for('user.get_request'
# ,name='王五',age=66)
# return redirect(ret2)
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
flask
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |models.py| | |
| | |views.py| | |
| |app.py| | | |
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>首页</h2>
<hr/>
<a href="/login/">登录</a>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h2>Index</h2>
<hr>
<p>name:{{ name }}</p>
<p>age:{{ age }}</p>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h2>登陆</h2>
<hr/>
<form action="" method="post">
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="password">
</p>
</form>
</body>
</html>
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
return app
views.py
# 路由+视图函数
from flask import Blueprint, render_template, jsonify, make_response, redirect, url_for, request
# from .models import *
# 创建蓝图 第一个参数是蓝图的名称,第二个参数是蓝图所在的模块
blue=Blueprint('user',__name__)
# blue2=Blueprint('product',__name__)
# 首页
@blue.route('/')
@blue.route('/home/')
def home():
return render_template('home.html')
# 登陆
@blue.route('/login/')
def login():
# GET:访问登录页面
print(request.method)
if request.method=='GET':
return render_template('login.html')
# POST:实现登录功能
elif request.method=='POST':
pass
# 获取前端提交过来的数据
username=request.form.get('username')
password=request.form.get('password')
# 2.模拟登录:用户名和密码验证
return 'POST'
return render_template('login.html')
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
flask 模型 数据库
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |models.py| | |
| | |views.py| | |
| | |exts.py| | |
| |app.py| | | |
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>首页</h2>
<hr/>
<a href="/login/">登录</a>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h2>Index</h2>
<hr>
<p>name:{{ name }}</p>
<p>age:{{ age }}</p>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h2>登陆</h2>
<hr/>
<form action="" method="post">
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="password">
</p>
</form>
</body>
</html>
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .exts import init_exts
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
# 配置数据库
db_uri='sqlite:///sqlite3.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #禁止对象追踪修改
# 初始化插件
init_exts(app=app)
return app
exts.py
# exts.py:插件管理
# 扩展的第三方插件
# 1。导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# 2.初始化
db=SQLAlchemy() #ORM
migrate=Migrate() #数据迁移
# 3.和app对象绑定
def init_exts(app):
db.init_app(app)
migrate.init_app(app=app, db=db)
models.py
# models.py:模型,数据库
from .exts import db
# 模型Model:类
#必须继承db.Model
class User(db.Model):
# 表名
__tablename__ = 'user'
# 定义表字段
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(50),unique=True,nullable=False)
age=db.Column(db.Integer,default=18)
# sex=db.Column(db.Boolean,default=True)
# salary=db.Column(db.Float,default=10000, nullable=True)
def __repr__(self):
return self.name
views.py
# 路由+视图函数
from flask import Blueprint, render_template, jsonify, make_response, redirect, url_for,request
from .models import *
# 创建蓝图
blue=Blueprint('user',__name__)
# blue2=Blueprint('product',__name__)
# 首页
@blue.route('/')
@blue.route('/home/')
def home():
return render_template('home.html')
# 登陆
@blue.route('/login/')
def login():
# GET:访问登录页面
if request.method=='GET':
return render_template('login.html')
# POST:实现登录功能
elif request.method=='POST':
pass
# 获取前端提交过来的数据
username=request.form.get('username')
password=request.form.get('password')
# 2.模拟登录:用户名和密码验证
return 'POST'
return render_template('login.html')
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
# 数据迁移命令 flask db init
# flask db migrate 生成迁移文件
# flask db upgrade 执行迁移文件的升级
# flask db downgrage 执行迁移文件中的降级
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
1 flask db init
数据迁移命令 生成migrations文件夹
2 flask db migrate 生成迁移文件
3 flask db upgrade 执行迁移文件的升级
4 flask db downgrage 执行迁移文件中的降级
flask
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |models.py| | |
| | |views.py| | |
| | |templates| | |
| | |exts.py| | |
| |app.py| | | |
| |spider.py| | | |
home.html index.html login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>首页</h2>
<hr/>
<a href="/login/">登录</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h2>Index</h2>
<hr>
<p>name:{{ name }}</p>
<p>age:{{ age }}</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h2>登陆</h2>
<hr/>
<form action="" method="post">
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="password">
</p>
</form>
</body>
</html>
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .exts import init_exts
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
# 配置数据库
# db_uri='sqlite:///sqlite3.db'
db_uri = 'mysql+pymysql://root:123456@127.0.0.1:3306/bookd' # mysql的配置
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #禁止对象追踪修改
# 初始化插件
init_exts(app=app)
return app
exts.py
# exts.py:插件管理
# 扩展的第三方插件
# 1。导入第三方插件
# pip install -U flask-caching
from flask_caching import Cache
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# 2.初始化
db=SQLAlchemy() #ORM
migrate=Migrate() #数据迁移
cache=Cache(config={'CACHE_TYPE': 'simple' #缓存类型
})
# 3.和app对象绑定
def init_exts(app):
db.init_app(app)
migrate.init_app(app=app, db=db)
cache.init_app(app=app)
# 配置缓存
# app.config['CACHE_TYPE'] = 'simple' # 使用简单的内存缓存
# cache = Cache(app)
models.py
# models.py:模型,数据库
from .exts import db
# 模型Model:类
#必须继承db.Model
class User(db.Model):
# 表名
__tablename__ = 'user'
# 定义表字段
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(50),unique=True,nullable=False)
age=db.Column(db.Integer,default=18)
# sex=db.Column(db.Boolean,default=True)
# salary=db.Column(db.Float,default=10000, nullable=True)
def __repr__(self):
return self.name
views.py
# 路由+视图函数
from flask import Blueprint, render_template, jsonify, make_response, redirect, url_for, request
from .models import *
from .exts import cache
import time
# 创建蓝图
blue=Blueprint('user',__name__)
# 首页
@blue.route('/')
# 写装饰器
@cache.cached(timeout=20) #给视图函数加一个缓存20秒内
def home():
# 缓存通常用在加载较慢的文件
print('Index')
time.sleep(5)
return render_template('home.html')
# 钩子:钩子函数
# 也叫中间件
# before_request:每一次请求之前访问
@blue.before_request
def before():
print('before_request')
print(request.method)
print(request.remote_addr)
#简单反爬
print(request.user_agent)
# if "python" in request.user_agent.string:
# return '再见'
#针对Ip做反爬(简单
ip=request.remote_addr
#cache.get()
#cache.set()
if cache.get(ip):
return '小伙子,别爬了'
# 对每个IP设置一个缓存,1秒内不让重复访问
else:
cache.set(ip,'value',timeout=5)
# jsonify():序列化
@blue.route('/users/',methods=['GET','POST','PUT','DELETE'])
def users():
pass
app.py
from flask import Flask
from App import create_app
# 数据迁移命令 flask db init
# flask db migrate 生成迁移文件
# flask db upgrade 执行迁移文件的升级
# flask db downgrage 执行迁移文件中的降级
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
spider.py
import requests
res=requests.get('http://127.0.0.1:5000/')
print(res.text)
Flask 类视图和RESful
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |__apis__.py| | |
| | |exts.py| | |
| | |models.py| | |
| | |urls.py| | |
| | |templates| | |
| |app.py| | | |
| |spider.py| | | |
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .exts import init_exts
from .urls import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 配置数据库
# db_uri='sqlite:///sqlite3.db'
db_uri = 'mysql+pymysql://root:123456@127.0.0.1:3306/user2' # mysql的配置
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #禁止对象追踪修改
# app.config.from_object(config)
# 初始化插件
init_exts(app=app)
return app
apis.py
from flask import jsonify
from flask_restful import Resource,fields,marshal_with,reqparse
from .models import *
# 类视图:CBV Class Based View
# 视图函数:FBV Function Based
class HelloResource(Resource):
def get(self):
return 'get请求'
def post(self):
return 'post请求'
# Flask-RESTful
# 字段格式化:定义返回给前端的数据格式
ret_fields={
'status':fields.Integer,
'msg':fields.String,
'data':fields.String,
'like':fields.String(default='ball'),
'like2':fields.String(),
'data2':fields.String(attribute='data')
}
class UserResource(Resource):
@marshal_with(ret_fields)
def get(self):
return {
'status':1,
'msg':'ok',
'data':'如何放到网页?'
}
# 嵌套使用
user_fields={
# 'id':fields.Integer,
'name':fields.String,
'age':fields.Integer,
# 绝对路径
'url':fields.Url(endpoint='id',absolute=True)
}
ret_fields2={
'status': fields.Integer,
'msg': fields.String,
# 使用user对象
'data':fields.Nested(user_fields),
}
class User2Resource(Resource):
@marshal_with(ret_fields2)
def get(self):
# 从数据库取第一个数据
user=User.query.first()
return {
'status':1,
'msg':'ok',
'data':user
}
#-------------------------字段格式化----------------
user_fields2={
# 'id':fields.Integer,
'name':fields.String,
'age':fields.Integer,
}
ret_fields3={
'status': fields.Integer,
'msg': fields.String,
# 使用user对象
'data':fields.List(fields.Nested(user_fields))
}
class User3Resource(Resource):
@marshal_with(ret_fields3)
def get(self):
users=User.query.all()
return {
'status':1,
'msg':'ok',
'data':users
}
# ------------------参数解析-----------------
parser=reqparse.RequestParser()
parser.add_argument('name',type=str,required=True,help='name是必须的参数')
parser.add_argument('age',type=int,action='append')
parser.add_argument('key',type=str,action='cookies')
class User4Resource(Resource):
def get(self):
# 获取参数
args=parser.parse_args()
name=args.get('name')
age=args.get('age')
key=args.get('key')
return jsonify ({
'name':name,'age':age,'key':key
})
exts.py
# exts.py:插件管理
# 扩展的第三方插件
# 1。导入第三方插件
from flask_caching import Cache
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_restful import Api
# 2.初始化
db=SQLAlchemy() #ORM
migrate=Migrate() #数据迁移
api=Api()
# 3.和app对象绑定
def init_exts(app):
db.init_app(app)
migrate.init_app(app=app, db=db)
api.init_app(app=app)
models.py
# models.py:模型,数据库
from .exts import db
# 模型Model:类
#必须继承db.Model
class User(db.Model):
# 表名
__tablename__ = 'user'
# 定义表字段
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(50),unique=True,nullable=False)
age=db.Column(db.Integer,default=18)
# sex=db.Column(db.Boolean,default=True)
# salary=db.Column(db.Float,default=10000, nullable=True)
# def __repr__(self):
# return self.name
urls.py
# urls.py 路由文件
from .exts import api
from .apis import *
# 路由
api.add_resource(HelloResource, '/hello/')
api.add_resource(UserResource, '/user/',endpoint='id')
api.add_resource(User2Resource, '/user2/')
api.add_resource(User3Resource, '/user3/')
api.add_resource(User4Resource, '/user4/')
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
# 三步走
# flask db init
# flask db migrate
# flask db upgrade
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)
spider.py
import requests
res=requests.get('http://127.0.0.1:5000/user')
print(res.text)
res3=requests.get('http://127.0.0.1:5000/user3')
print(res3.text)
res4=requests.get('http://127.0.0.1:5000/user4',
json={'name':'lisi','age':33},
headers={'Content-Type':'application/json',
'Cookie':'key=77777777'
})
print(res4.text)
flask 模型拆分_模型表操作
|flask| |
| |app|
| | |static| | |
| | |templates| | |
| | | |home.html| |
| | | |index.html | |
| | | |login.html | |
| | |__init__.py| | |
| | |exts.py| | |
| | |models.py| | |
| | |views.py| | |
| |app.py| | | |
init.py
#初始化文件,创建Flask应用
from flask import Flask
from .exts import init_exts
from .views import *
# 导包时仅声明函数,并不创建函数。
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
# 配置数据库
# db_uri='sqlite:///sqlite3.db'
db_uri='mysql+pymysql://root:123456@127.0.0.1:3306/flaskdb2' #mysql的配置
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #禁止对象追踪修改
# 初始化插件
init_exts(app=app)
return app
exts.py
# exts.py:插件管理
# 扩展的第三方插件
# 1。导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# 2.初始化
db=SQLAlchemy() #ORM
migrate=Migrate() #数据迁移
# 3.和app对象绑定
def init_exts(app):
db.init_app(app)
migrate.init_app(app=app, db=db)
models.py
# models.py:模型,数据库
from .exts import db
# 模型Model:类
#必须继承db.Model
# 多表关系
# 一对多
# 班级:学生=1:N
# 班级表
class Grade(db.Model):
__tablename__ = 'grade' #表名
id = db.Column(db.Integer, primary_key=True,autoincrement=True)
name=db.Column(db.String(30),unique=True)
#建立关联
# 第一个参数:关联的模型名(表)
# 第二个参数:反向引用的名称,grade对象,让student去反过来得到grade对象的名称,stduent.grade
# 第三个参数:懒加载
students=db.relationship('Student',backref='grade',lazy=True)
# 学生表 一对多
class Student(db.Model):
__tablename__ = 'student'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(30), unique=True)
age=db.Column(db.Integer)
#添加外键:跟Grade表中的id字段关联
gradeid=db.Column(db.Integer,db.ForeignKey(Grade.id))
class User(db.Model):
# 表名
__tablename__ = 'user'
# 定义表字段
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(30),unique=True,)
age=db.Column(db.Integer,default=18)
# models层后需要有数据迁移
#flask db init
# 生成迁移文件
#flask db migrate
#更新
#flask db upgrade
def __repr__(self):
return self.name
# ----------------多对多----------------
# 用户收藏电影
# 用户:电影=N:M
# 中间表:收藏表
collect=db.table(
'collects',
db.Column('user_id',db.Integer,db.ForeignKey('usermodel.id'),primary_key=True),
db.Column('movie_id',db.Integer,db.ForeignKey('movie.id'),primary_key=True),
)
# 用户表
# class UserModel(db.Model):
# __tablename__ = 'usermodel'
# # 定义表字段
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# name = db.Column(db.String(30), unique=True)
# age=db.Column(db.Integer)
#
# # 电影表
# class Movie(db.Model):
# __tablename__ = 'movie'
# # 定义表字段
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# name = db.Column(db.String(30))
# # 关联 secondary 设置中间关联的表
# # users=db.relationship('UserModel',backref='movies',lazy=True,secondary=collect)
# users=db.relationship('UserModel',backref='movies',lazy='dynamic',secondary=collect)
views.py
# 路由+视图函数
import random
from operator import or_
from flask import Blueprint, render_template, jsonify, make_response, redirect, url_for, request
from sqlalchemy import desc
from .models import *
# 创建蓝图
blue=Blueprint('user',__name__)
# blue2=Blueprint('product',__name__)
# 首页
@blue.route('/')
def index():
return 'index'
# 多表操作
# 一对多
# 增加数据
@blue.route('/addgrade/')
def add_grade_std():
# 添加班级
grades=[]
for i in range(1,11):
grade=Grade()
grade.name='Jay'+str(random.randint(10,99))
grades.append(grade)
try:
db.session.add_all(grades)
db.session.commit()
except Exception as e:
print('e',e)
db.session.rollback()
db.session.flush()
return 'OK'
@blue.route('/addstu/')
def add_stu():
# 学生
students=[]
for i in range(10,20):
student=Student()
student.name=f'Lucy{i}'
student.age=i
student.gradeid=random.randint(1,2)
students.append(student)
try:
db.session.add_all(students)
db.session.commit()
except Exception as e:
print('e',e)
db.session.rollback()
db.session.flush()
return 'OK'
@blue.route('/updatestu/')
def update_stu():
stu=Student.query.first()
stu.age=100
db.session.commit()
return 'OK'
@blue.route('/delstu/')
def del_stu():
stu=Student.query.first()
print(stu.id)
db.session.delete(stu)
db.session.commit()
return 'OK'
@blue.route('/delgrade/')
def del_grade():
# 删除班级
grade=Grade.query.first()
db.session.delete(grade)
db.session.commit()
return 'OK'
# 查询
@blue.route('/getstu/')
def get_stu():
# 查询某学生所在的班级 id
stu=Student.query.get(23)
# print(stu.name,stu.age)
# print(stu.gradeid,stu.grade)
# print(stu.gradeid,stu.grade,stu.grade.name,stu.grade.id)
# 查询某班级下的所有学生
grade=Grade.query.get(2)
print(grade.name)
print(grade.students)
for stu in grade.students:
print(stu.name,stu.age)
return 'OK'
# --------------多对多--------------
# @blue.route('/adduser/')
# def adduser():
# # 添加用户
# users=[]
# for i in range(10,20):
# user=UserModel()
# user.name=f'Lucy{i}'
# user.age=i
# users.append(user)
# try:
# db.session.add_all(user)
# db.session.commit()
# except Exception as e:
# print('e',e)
# db.session.rollback()
# db.session.flush()
# return 'OK'
app.py
from flask import Flask
from App import create_app
# flask 在当前文件运行,当前模块为项目目录
# 添加一个路由和视图函数
# 三步走
# flask db init
# flask db migrate
# flask db upgrade
app=create_app()
if __name__ == '__main__':
# 启动服务器
app.run(debug=True)