flask学习笔记

发布于:2025-08-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

以下是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)


网站公告

今日签到

点亮在社区的每一天
去签到