Flask中如何在蓝图中使用sqlalchemy

博客强调在Flask程序中,引入蓝图的位置需在初始化db之后,否则会报错。还介绍了程序结构,包括建立mysql和app的连接,需在config.py中加入两项配置,以及主要的两个蓝图及其注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

原文地址:https://www.cnblogs.com/diaosir/p/6351721.html

主要是要注意引入蓝图的位置一定要是在初始化db之后才行;

下程序结构:

1.建立mysql和app的连接

在config.py中加入以下两项配置:

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = True

如此在app/__init__.py中加入
app.config.from_object('config')
db = SQLAlchemy(app)
就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db

蓝图的引入要放在初始化DB之后,不然会报错;

 

完整的app/__init__.py代码如下:
from flask import Flask, url_for, request, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
# 这里引入蓝图的配置
from app import models,views

接下来就是主要的两个蓝图,以及他们的注册

#app/user.py

from flask import Blueprint, render_template, redirect,request
from app import db
from .models import User
user = Blueprint('user',__name__)

@user.route('/index')
def index():
    return render_template('user/index.html')

@user.route('/add/',methods=['GET','POST'])
def add():
    if request.method == 'POST':
        p_user = request.form.get('username',None)
        p_email = request.form.get('email',None)
        p_password = request.form.get('password',None)

        if not p_user or not p_email or not p_password:
            return 'input error'

        newobj = User(username=p_user, email=p_email, password=p_password)
        db.session.add(newobj)
        db.session.commit()
        users = User.query.all()
        return render_template('user/add.html',users=users)
    users = User.query.all()
    return render_template('user/add.html',users=users)

@user.route('/show')
def show():
    return 'user_show'

#app/admin.py

#admin.py
from flask import Blueprint,render_template, request, redirect
from app import db
from .models import Admin

admin = Blueprint('admin',__name__)

@admin.route('/index')
def index():
    return render_template('admin/index.html')

@admin.route('/add/',methods=['POST','GET'])
def add():
    if request.method == 'POST':
        p_admin = request.form.get('username',None)
        p_email = request.form.get('email',None)
        p_password = request.form.get('password',None)

        if not p_admin or not p_email or not p_password:
            return 'input error'

        newobj = Admin(username=p_admin, email=p_email, password=p_password)
        db.session.add(newobj)
        db.session.commit()
        admins = Admin.query.all()
        return render_template('admin/add.html',admins=admins)
    admins = Admin.query.all()
    return render_template('admin/add.html',admins=admins)

@admin.route('/show')
def show():
    return 'admin_show'

 

#app/views.py

from app import app
from .admin import admin
from .user import user

app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')

#run.py

from app import app
app.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值