flask web开发中关于flask-SQLAlchemy的使用解释和完整代码 - Gavin_Hall的博客 - CSDN博客
2019-04-19 10:05
288 查看
>>>前言
在自学《flask web开发》一书时遇到的问题,由于书讲的不太清楚,而在网上搜索到的基本都是和书一样的代码片段,不是很懂其中的整个流程,始终没有找到合适的解决办法。于是又返回前面看了一下那些基本的知识点,又琢磨了一下,终于把它给解决了,这个博文的 主要目的 是给出一个完整的解决方案,在这里分享一下我的解决方法。
>>>大概流程:
1.设置 SQLite数据库 基本参数、创建渲染类 Myform;
2. 建立两个基本关系型数据表 类,本例中其实一个表就够了,但是还是 按照书本 的来,因为后面的知识点和现在承接的;
3. 创建数据表并添加一些原始值;
4. 添加路由函数;
5. 封装运行。
>>>要求:
其实能找到这里的,应该也是学习了那本书的基本知识了,并且也是掌握了一定的python基础了的,但在这里还是提醒一下要求:
- python3 环境
- SQLite数据库
- 下载了所有需要的库(参照代码的 import部分)
>>>所有解释都在代码中
w55_flask_sqlalchemy.py(避免起 flask_sqlalchemy.py 或者 sqlalchemy.py 这两个特殊的文件名!否则出错!)
import os from flask_wtf import Form from flask_script import Manager from wtforms import StringField, SubmitField from wtforms.validators import Required from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy from flask import Flask, session, redirect, url_for, render_template basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite') # SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为 True时,每次请求结束后都会自动提交数据库中的变动。 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.debug = True app.secret_key = 'the secretest key' Bootstrap(app) db = SQLAlchemy(app) class MyForm(Form): name = StringField('What is your name?', validators=[Required()]) submit = SubmitField('Submit') class Role(db.Model): # 数据表名字 __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) # 第一个参数表明这个关系的另一端是哪个模型。 # backref 参数向 User 模型中添加一个 role 属性,从而定义反向关系 # 这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值 users = db.relationship('User', backref='role') def __repr__(self): return '<Role %r>' % self.name class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) # 传给 db.ForeignKey() 的参数 'roles.id' 表明,这列的值是 roles 表中行的 id 值 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) def __repr__(self): return '<User %r>' % self.username # 创建数据表并添加若干原始值 db.drop_all() db.create_all() admin_role = Role(name='Admin') mod_role = Role(name='Moderator') user_role = Role(name='User') user_john = User(username='john', role=admin_role) user_susan = User(username='susan', role=user_role) user_david = User(username='david', role=user_role) db.session.add_all([admin_role, mod_role, user_role,user_john, user_susan, user_david]) db.session.commit() @app.route('/', methods=['GET', 'POST']) def index(): form = MyForm() if form.validate_on_submit(): # session['known']用于标识user是否是新值, # 查找数据库中是否有表单中的值,没有则创建新值,并标识为新,否则标识为已认识 user = User.query.filter_by(username=form.name.data).first() if user is None: user = User(username=form.name.data) db.session.add(user) session['known'] = False else: session['known'] = True session['name'] = form.name.data form.name.data = '' return redirect(url_for('index')) # 第1次运行时执行此return return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False)) app.debug = True manager = Manager(app) if __name__ == '__main__': manager.run()
>>>上面对应的index.html
注意: index.html是放在flask-sqlalchemy.py的同级文件夹templates中,即:
/w55_flask_sqlalchemy.py
/templates/index.html
{% extends "bootstrap/base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}Form{% endblock %} {% block content %} <div class="container"> <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}.</h1> {% if not known %} <p>Good to see you!</p> {% else %} <p>Good to have you back!</p> {% endif%} <!-- 此函数能快速渲染form成HTML文本 --> {{ wtf.quick_form(form) }} </div> {% endblock %}
运行python flask_sqlalchemy.py runserver 看效果,如下:
图1:第一次输入路由时
图2:输入刚刚已在数据库添加的用户 john
图3:输入新用户 gavin
相关文章推荐
- 关于csdn博客的使用
- 临界比例度法整定P、PI、PID控制器的参数的matlab算法实现 --- Gavin_Hall的博客 -- CSDN博客
- 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy
- PID算法模型分析:基于温度控制 --- Gavin_Hall的博客 -- CSDN博客
- web开发中经常使用到的代码(csdn中下载的资源)
- 关于CSDN博客中的代码高亮显示
- 使用Python以及flask框架实现区块链的创建、工作量证明、共识算法、生成网络节点并一步步运行挖矿检验(文末附项目完整代码)
- flask中使用SQLAlchemy进行辅助开发的代码
- flask中使用SQLAlchemy进行辅助开发的代码
- 我的Android进阶之旅------>关于使用CSDN-markdown编辑器来编写博客
- 关于使用PHP向客户端发送文件-示例代码解释
- [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程
- flask-使用SQLAlchemy对博客文章进行分页
- 小白专场:初次使用CSDN写博客,代码如何显示高亮?如何显示复制按钮?
- 用flask开发个人博客(36)—— 使用SQLAlchemy对博客文章进行分页
- 用flask开发个人博客(11)—— 模板中代码的重复使用
- [小调查] 关于大家使用CSDN空间的感受!
- 关于csdn博客的一个小问题
- CSDN 博客上不能插入一段SQL程序代码 解决方法
- 使用word 2007 发布csdn博客