• flask -models 组件


    flask- models 组件

    scapy:

    《scapy基础篇》和《scapy应用篇》,《应用篇》
    
        用Python编写的交互式数据包处理程序,它能让用户发送、嗅探、解析,以及伪造网络报文,从而用来侦测、扫描和向网络发动攻击。Scapy可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的传统任务。它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Nmap,tcpdump和tshark 的功能
    

    flask :

    models.py来创建mysql数据库
    
    -->  pip install -i https://pypi.douban.com/simple/ flask-sqlalchemy
        
        pip install -i https://pypi.douban.com/simple/ pymysql
            
        pip install -i https://pypi.douban.com/simple/ flask
       
    --> 所有模型的基类叫做 db.Model 。它存储在你必须创建的 SQLAlchemy 实例上
    

    Column类型:

    • 类型名 Python 类型 说明
      Integer int 整数
      String(size) str 有最大长度的字符串
      Text str 长 unicode 文本
      Float float 存储浮点值
      Boolean bool 存储布尔值
      Date datetime.date 日期
      Time datetime.time 时间
      DateTime datetime.datetime 日期和时间
      PickleType 任何python对象 存储一个持久化 Python 对象
      LargeBinary str 存储任意大的二进制数据

    常用字段:

    • 选项名 说明 示例
      primary_key 设置主键 primary_key=True
      unique 是否唯一 unique=True
      index 是否创建索引 index=True
      nullable 是否允许为空 nullable=True
      default 设置默认值 default=datetime.datetime.now

    连接数据库的· url 方式:

    连接URI格式
    	dialect+driver://username:password@host:port/database
      
    	Mysql mysql://scott:tiger@localhost/mydatabase
        Postgres postgresql://scott:tiger@localhost/mydatabase
        SQLite sqlite:////absolute/path/to/foo.db
    

    models :

    from flask import Flask
    import pymysql
    from flask_sqlalchemy import SQLAlchemy
     
     
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@localhost:3306/artcms_pro"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
     
    db = SQLAlchemy(app)
    
    """
    用户表:
    0.编号
    1.账号
    2.密码
    3.注册的时间
    """
     
     
    class User(db.Model):
        __tablename__ = "user"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(20), nullable=False)
        pwd = db.Column(db.String(100), nullable=False)
        addtime = db.Column(db.DateTime, nullable=False)
     
        def __repr__(self):
            return "<User %r>" % self.name
    
    """
    文章表
    1.编号
    2.标题
    3.分类
    4.作者
    5.封面
    6.内容
    7.发布时间
    """
     
     
    class Art(db.Model):
        __tablename__ = "art"
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(100), nullable=False)
        cate = db.Column(db.Integer, nullable=False)
        user_id = db.Column(db.Integer, nullable=False)
        logo = db.Column(db.String(100), nullable=False)
        content = db.Column(db.Text, nullable=False)
        addtime = db.Column(db.DateTime, nullable=False)
     
        def __repr__(self):
            return "<User %r>" % self.title
     
    
    if __name__ == "__main__":
        db.create_all()
    
    一个表一个类,继承SQLAlchemy的Model类
    app.config的两个,一个是连接数据库的,跟平常的SQLAlchemy表示的一样,一个是是否可以跟踪修改,一般是True
    __tablename__='xxx'来作为表的名称
    db.Column来创建表头,db中有很多类型,比如String、Integer、Text、Datetime等
    primary_key来设置主键
    nullable表示是否可以为空
    要有一个repr函数,来返回呈现一个值
    db.create_all()表示创建所有的表
    

    数据库生成:

     python models.py
    

    外键关联:

    外键都是,一个表的id对于另外一个表的相对应的id
    
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from _datetime import datetime
    import pymysql
     
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1:3306/movie"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
     
    db = SQLAlchemy(app)
    
    # 会员数据模型
    class User(db.Model):
        __tablename__ = "user"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(100), unique=True)  # 昵称
        pwd = db.Column(db.String(100))  # 密码
        email = db.Column(db.String(100), unique=True)  # 邮箱
        phone = db.Column(db.String(100), unique=True)  # 手机号
        info = db.Column(db.Text)  # 个性简介
        face = db.Column(db.String(255), unique=True)  # 头像
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 注册时间
        uuid = db.Column(db.String(255), unique=True)  # 唯一标志符
        userlogs = db.relationship('Userlog', backref='user')  # 会员日志外键关系关联
        comments = db.relationship('Comment', backref='user')  # 评论外键关系关联
        moviecols = db.relationship('Moviecol', backref='user')  # 电影收藏外键关系关联
     
        def __repr__(self):
            return "<User %r>" % self.name
    
    # 会员登录日志
    class Userlog(db.Model):
        __tablename__ = "userlog"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 所属会员
        ip = db.Column(db.String(100))  # 登录IP
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 登录时间
     
        def __repr__(self):
            return "<Userlog %r>" % self.id
    
    # 标签
    class Tag(db.Model):
        __tablename__ = "tag"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(100), unique=True)  # 标题
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
        movies = db.relationship('Movie', backref='tag')  # 电影外键关系关联
     
        def __repr__(self):
            return "<Tag %r>" % self.name
    
    # 电影
    class Movie(db.Model):
        __tablename__ = "movie"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        title = db.Column(db.String(255), unique=True)  # 电影标题
        url = db.Column(db.String(255), unique=True)  # 电影播放的url
        info = db.Column(db.Text)  # 电影简介
        logo = db.Column(db.String(255), unique=True)  # 电影的logo
        star = db.Column(db.SmallInteger)  # 电影的星级
        playnum = db.Column(db.BigInteger)  # 电影播放量
        commentnum = db.Column(db.BigInteger)  # 电影的评论量
        tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'))  # 电影所属标签id
        area = db.Column(db.String(255))  # 上映地区
        release_time = db.Column(db.Date)  # 上映时间
        length = db.Column(db.String(100))  # 播放时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
        comments = db.relationship('Comment', backref='movie')  # 评论外键关系关联
        moviecols = db.relationship('Moviecol', backref='movie')  # 电影收藏外键关系关联
     
        def __repr__(self):
            return "<Movie %r>" % self.title
    
    # 上映预告
    class Preview(db.Model):
        __tablename__ = "preview"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        title = db.Column(db.String(255), unique=True)  # 电影标题
        logo = db.Column(db.String(255), unique=True)  # 电影的logo
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Preview %r>" % self.title
    
    # 评论
    class Comment(db.Model):
        __tablename__ = "comment"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        content = db.Column(db.Text)  # 评论内容
        movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'))  # 电影所属ID
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 用户所属id
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Comment %r>" % self.id
    
    # 电影收藏
    class Moviecol(db.Model):
        __tablename__ = "moviecol"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'))  # 电影所属ID
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 用户所属id
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Moviecol %r>" % self.id
    
    # 权限
    class Auth(db.Model):
        __tablename__ = "auth"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(100), unique=True)  # 权限名称
        url = db.Column(db.String(255), unique=True)  # 权限的地址
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Auth %r>" % self.name
    
    # 角色
    class Role(db.Model):
        __tablename__ = "role"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(100), unique=True)  # 角色名称
        auths = db.Column(db.String(600))  # 权限列表
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
        admins = db.relationship('Admin', backref='role')  # 角色外键关系关联
     
        def __repr__(self):
            return "<Role %r>" % self.name
     
    
     
    # 管理员
    class Admin(db.Model):
        __tablename__ = "admin"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        name = db.Column(db.String(100), unique=True)  # 管理员名称
        pwd = db.Column(db.String(100), unique=True)  # 密码
        is_super = db.Column(db.SmallInteger)  # 是否是超级管理员,0为超级管理员
        role_id = db.Column(db.Integer, db.ForeignKey('role.id'))  # 角色ID
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
        adminlogs = db.relationship('Adminlog', backref='admin')  # 管理员登录日志外键关系关联
        oplogs = db.relationship('Oplog', backref='admin')  # 管理员操作日志外键关系关联
     
        def __repr__(self):
            return "<Admin %r>" % self.name
    
    # 管理员登录日志
    class Adminlog(db.Model):
        __tablename__ = "adminlog"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))  # 管理员所属ID
        ip = db.Column(db.String(100))  # 登录IP
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Adminlog %r>" % self.id
    
    # 操作日志
    class Oplog(db.Model):
        __tablename__ = "oplog"
        id = db.Column(db.Integer, primary_key=True)  # 编号
        admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))  # 管理员所属ID
        ip = db.Column(db.String(100))  # 操作ip
        reason = db.Column(db.String(600))  # 操作原因
        addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间
     
        def __repr__(self):
            return "<Oplog %r>" % self.id
    
     
    if __name__ == "__main__":
        db.create_all()
        
    python models.py
    

    解析:

    通过db.relationship()来建立与其他表的联系:
        
    	第一个参数就是对应的类的名称,backref后面跟的是本表的名字
        
        userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id
    
  • 相关阅读:
    SQL Server 快速大数据排序方法
    RGB颜色名称与色值对应表
    Visual Studio 2017 Android 调试无法连接到虚拟机
    sqlite 使用 cte 及 递归的实现示例
    C# 判断文件编码
    SQL点点滴滴_SQL分页查询
    SQL点点滴滴_判断字段或者字符中是否包含有特殊字符
    SQL点点滴滴_公用表表达式(CTE)递归的生成帮助数据
    【Oracle】Update方法
    SQL点点滴滴_DELETE小计
  • 原文地址:https://www.cnblogs.com/shaozheng/p/12930411.html
Copyright © 2020-2023  润新知