首页 > 数据库 >flask搭建平台入门教程一:配置数据库

flask搭建平台入门教程一:配置数据库

时间:2022-10-16 18:56:07浏览次数:71  
标签:__ py flask 数据库 入门教程 db Column app

flask是什么?flask可以做什么这里就不说了,百度一下即可,这篇文章主要是手把手带你使用flask搭建一个简单的注册、登陆、以及用户权限管理模块。

首先需要创建一个FLASK项目,如何创建可以参考flask官方文档,不再赘述。

创建app.py

from flask import Flask
from flask import render_template

app = Flask(__name__)
app.config.from_pyfile(app.root_path + '/config.py')

@app.route("/")
def home():
    return render_template("home.html")

if __name__ == '__main__':
    app.run()

配置数据库

下一步配置数据库,完成mvc框架中的model层配置,pip安装flask-sqlalchemy和pymysql,在config.py配置数据库

新建models包,添加用户表文件user.py、群组表文件group.py、权限表文件auth.py

__init__.py

from flask_sqlalchemy import SQLAlchemy
# 初始化db,关联flask 项目 db = SQLAlchemy()

user.py

from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
from models import db

class User(db.Model):
    __tablename__ = "user" # 数据库表名
    id = Column(Integer,primary_key=True)
    username = Column(String(24), nullable=False, unique=True, comment="昵称")
    password = Column(String(100), nullable=False, comment="密码")
    nickname = Column(String(100),nullable=True, comment="用户姓名")
    email = Column(String(100), nullable=True,  comment="电子邮箱")
    isadmin = Column(Boolean,default=False,comment="管理员")

group.py

from sqlalchemy import Column, Integer, String
from models import db

class Group(db):
    __tablename__ = 'group'

    id = Column(Integer, primary_key=True)
    # : name of group
    # : 权限组名称
    name = Column(String(60), comment="权限组名称")
    # a description of a group
    # 权限组描述
    info = Column(String(255), comment="权限组描述")

auth.py

from models import db
from sqlalchemy import Column,Integer,String

class Auth(db.Model):
    __tablename__ = 'auth'

    id = Column(Integer, primary_key=True)
    # : 权限字段
    auth = Column(String(60), comment="权限字段")
    # : 权限的模块
    endpoint = Column(String(60), comment="路由名称")

 

在app.py中加入以下代码初始化数据库

......
db.init_app(app) from app.models import user, group, auth with app.app_context(): db.create_all()

启动程序后成功创建三个表,然后添加表之间的关联关系

app/models/user.py

group_id = Column(Integer,ForeignKey("group.id"),default=1,nullable=True)

app/models/group.py

auths = relationship("Auth",backref="auth_group",cascade="all, delete")
users = relationship("User",backref="user_group",cascade="save-update")

app/models/auth.py

group_id = Column(Integer, ForeignKey("group.id"), nullable=True)

启动程序后发现不能修改表结构,需要使用flask-migrate修改

app.py添加Migrate(app, db)

......
# 迁移组件初始化 Migrate(app, db)

执行

flask db init

init 命令执行后,会生成migrations目录

flask db migrate

migrate 命令执行后,会migrations目录下的version文件夹新增版本文件 

flask db upgrade

upgrade 命令更新表结构,查看数据库发现多了一张表记录变更信息

在models/__init__.py创建一个所有表文件的父类,加入创建时间、创建人等基本字段

class InfoCrud(db.Model):
    __abstract__ = True # 作为父类使用,并且不在数据库生成此表
    _create_time = Column('create_time', DateTime, default=datetime.now)
    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
    delete_time = Column(DateTime)
    update_user_id = Column(Integer, nullable=True)
    create_user_id = Column(Integer, nullable=True)
    update_user_name = Column(String(50), nullable=True)
    create_user_name = Column(String(50), nullable=True)

将之前表的父类改为InfoCrud

class User(InfoCrud):
......

再次运行

flask db migrate  # ⽣成迁移版本, 保存到迁移文件夹中
flask db upgrade  # 执行迁移

成功的话所有表都增加了这些基本字段,对于model层的配置基本完成,下一篇文章学习编写controller层的代码,实现用户注册和登录,以及判断登录权限。

标签:__,py,flask,数据库,入门教程,db,Column,app
From: https://www.cnblogs.com/zerotest/p/16796743.html

相关文章

  • 环境变量 位置变量和预定义变量 以及通过脚本实现无人值守备份MySQL数据库
    一、环境变量的定义1)局部环境变量创建环境变量名为a和b的赋值[root@centos01]#a=benet[root@centos01]#b=6.0调用局部环境变量beent[root@centos01]#echo$a$bbeent6.0......
  • flask-信号
    flask信号Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。#pip3installblinker1.内置信号request_started=_signals......
  • 数据库的建立和删除
    --单行注释/*多行注释*/#单行注释--建立数据库createdatabased1;createdatabaseifnotexists`学生管理系统`;--指定字符集createdatabaseifnotexists`登......
  • 数据库列表的建立,添加数据和删除
    --建立数据库createdatabasedbname;createdatabaseifnotexists`dbshop`defaultchatsetutf8;--数据库列表showdatabases;--使用数据库usedbname;--查询账号......
  • kingbase(人大金仓)数据库的常用知识点与简单巡检
    KES服务的启停查看服务是否已设为开机自启systemctllist-dependencies|grepkingbase除了使用systemctl和service还可以使用sys_ctl管理KES服务......
  • 数据库连接池
    这是文件目录 链接库代码packagecom.itheima.jdbc.druid;importcom.alibaba.druid.pool.DruidDataSource;importcom.alibaba.druid.pool.DruidDataSourceFacto......
  • 基本jdbc链接数据库,更改数据
    packagecom.itheima.jdbc;//jdbcimportjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassJDBCDemo{publicsta......
  • navicat连接mysql数据库提示失败,提示2059错误
    Navicat连接数据库失败,提示2059错误,如下图参考资料发现使用的数据库版本是mysql8版本,不是mysql5.7版本MYSQL新版本(8以上版本)的用户登录账户加密方式是【caching_sha2_passwo......
  • ES中的一些基本概念以及和关系数据库对比
    以下总结点为自己思路总结,有不正确地方,请斧正。ES中的基本概念一……索引索引:存放在ES中同一个类型文档的集合叫做ES中的索引,类似于关系数据库中的TableES中的基......
  • 关于数据库的一些基础知识,不总结就会忘
    之前在Mac上安装了MySQL5.7版本,最近想连接数据库看看之前的数据还在不在,结果发现初始密码给忘了。这可怎么办,别着急,从头开始来吧 1.打开终端,输入mysql-uroot-p然后......