zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/shaozheng/p/12930411.html
Copyright © 2011-2022 走看看