Flask 项目系列 -- 基于Flask打造招聘网站(2017-12-07更新)

  1. 项目结构搭建
  2. 项目数据库的设计
  3. 我有罪,其实这个项目一直在写,只是没时间编写文章了。马上就有时间了。现在项目进展如下: 现在已经可以部署了,就是前端还有点丑。

简要描述:

  • 首先使用pip 安装flask pip install -i https://pypi.douban.com/simple
  • 创建目录

jobpuls --jobplus |---__init__.py |---app.py |---config.py |---forms.py |---models.py |---decorator.py |---handlers ||---front.py ||---admin.py |---static ||---js ||---css |---templates --manage.py

下载flask-migarte pip install flask-migarte models设计完成之后运行 export FLASK_APP=manage.py export FLASK_DEBUG=1 flask db init flask migarte -m "init database" flask upgrade

models设计后面加上。

  1. 数据库

更新models.py

class Base(db.Model):
    __abstract__ = True
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    deleted = db.Column(db.Integer, default=0)  # 逻辑删除:0表示显示,1表示删除


user_job = db.Table(
    'user_job',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id', ondelete='CASCADE')),
    db.Column('job_id', db.Integer, db.ForeignKey('jobs.id', ondelete='CASCADE'))
)


class User(Base, UserMixin):
    """
    用户表
    """
    __tablename__ = 'user'

    ROLE_USER = 10
    ROLE_STAFF = 20
    ROLE_ADMIN = 30

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(40), unique=True)
    email = db.Column(db.String(40), unique=True)
    phone = db.Column(db.Integer)
    _password = db.Column('password', db.String(256), nullable=False)
    role = db.Column(db.SmallInteger, default=ROLE_USER)

    def __repr__(self):
        return '<Admin:{}>'.format(self.username)

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, orig_password):
        self._password = generate_password_hash(orig_password)

    def check_password(self, password):
        return check_password_hash(self._password, password)

    @property
    def is_admin(self):
        return self.role == self.ROLE_ADMIN

    @property
    def is_staf(self):
        return self.role == self.ROLE_STAFF


class Resume(Base):
    """
    用户简历表
    """
    __tabalename__ = 'resume'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', uselist=False)
    job_experiences = db.relationship('JobExperience')
    edu_experiences = db.relationship('EduExperience')
    project_experiences = db.relationship('ProjectExperice')

    def profile(self):
        pass


class Experience(Base):
    __abstract__ = True

    id = db.Column(db.Integer, primary_key=True)
    begin_at = db.Column(db.DateTime)
    end_at = db.Column(db.DateTime)
    # 在职期间,做了什么,解决了什么问题,做出了什么贡献
    # 在校期间做过什么,取得过什么荣誉
    # 项目期间,做了什么,解决了什么问题,做出了什么贡献
    description = db.Column(db.String(1024))


class JobExperience(Experience):
    __tablename__ = 'job_experience'

    company = db.Column(db.String(32), nullable=False)
    city = db.Column(db.String(32), nullable=False)
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)


class ProjectExperice(Experience):
    __tablename__ = 'project_experience'

    name = db.Column(db.String(32), nullable=False)
    # 在项目中扮演的角色
    role = db.Column(db.String(32))
    # 多个技术用逗号隔开
    technologys = db.Column(db.String(64))
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)


class EduExperience(Experience):
    __tablename__ = 'edu_experience'

    school = db.Column(db.String(32), nullable=False)
    # 所学专业
    specialty = db.Column(db.String(32), nullable=False)
    degree = db.Column(db.String(16))
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)


class Jobs(Base):
    __tablename__ = 'jobs'

    id = db.Column(db.Integer, primary_key=True)
    # 职位名称
    name = db.Column(db.String(24))
    salary_low = db.Column(db.Integer, nullable=False)
    salary_high = db.Column(db.Integer, nullable=False)
    location = db.Column(db.String(24))
    # 职位标签,多个标签用逗号隔开,最多10个
    tags = db.Column(db.String(128))
    experience_requirement = db.Column(db.String(32))
    degree_requirement = db.Column(db.String(32))
    is_fulltime = db.Column(db.Boolean, default=True)
    # 是否在招聘
    is_open = db.Column(db.Boolean, default=True)
    company_id = db.Column(db.Integer, db.ForeignKey('company.id', ondelete='CASCADE'))
    company = db.relationship('Company', uselist=False)
    views_count = db.Column(db.Integer, default=0)

    def __repr__(self):
        return '<Job {}>'.format(self.name)


class Company(Base):
    __tablename__ = 'company'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False, index=True, unique=True)
    slug = db.Column(db.String(24), nullable=False, index=True, unique=True)
    logo = db.Column(db.String(64), nullable=False)
    site = db.Column(db.String(64), nullable=False)
    contact = db.Column(db.String(24), nullable=False)
    email = db.Column(db.String(24), nullable=False)
    location = db.Column(db.String(24), nullable=False)
    # 一句话描述
    description = db.Column(db.String(100))
    # 关于我们,公司详情描述
    about = db.Column(db.String(1024))
    # 公司标签,多个标签用逗号隔开,最多10个
    tags = db.Column(db.String(128))
    # 公司技术栈,多个技术用逗号隔开,最多10个
    stack = db.Column(db.String(128))
    # 团队介绍
    team_introduction = db.Column(db.String(256))
    # 公司福利,多个福利用分号隔开,最多 10 个
    welfares = db.Column(db.String(256))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='SET NULL'))
    user = db.relationship('User', uselist=False, backref=db.backref('company', uselist=False))


class Dilivery(Base):
    __tablename__ = 'delivery'

    # 等待企业审核
    STATUS_WAITING = 1
    # 被拒绝
    STATUS_REJECT = 2
    # 被接收,等待通知面试
    STATUS_ACCEPT = 3

    id = db.Column(db.Integer, primary_key=True)
    job_id = db.Column(db.Integer, db.ForeignKey('jobs.id', ondelete='SET NULL'))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='SET NULL'))
    status = db.Column(db.SmallInteger, default=STATUS_WAITING)
    # 企业回应
    response = db.Column(db.String(256))

后面再改表的显示吧

用户表

1

2

3

4

5

Tags: None

Archives QR Code

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python攻城狮

MySQL高级1.mysql高级3.内置函数4.时间与字符串的相互转换

要求:表的类型必须是innodb或bdb类型(表的默认类型就是innodb),才可以对此表使用事务

19710
来自专栏性能与架构

Mysql 索引与排序

image.png sql 中 order by 排序可能发生2种情况: 1)对应覆盖索引,直接在索引上查询时,就是有序的,不需要另外处理排序 2)没有使用到索...

34060
来自专栏抠抠空间

MySQL之表的数据类型

一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob....

37480
来自专栏Java帮帮-微信公众号-技术文章全总结

Oracle应用实战六——函数+集合

函数 字符函数 接收字符输入返回字符或者数值,dual是伪表 1. 把小写的字符转换成大小的字符 upper('smith') ? 2. 把大写字符变成小写字符...

31550
来自专栏云霄雨霁

Mybais映射文件笔记----查询

10930
来自专栏Python爬虫实战

MySQL从零开始:05 MySQL数据类型

距离上次更新 MySQL 从零开始系列,已经过去了十几天,时间隔得有点长,由于我选用的是 MySQL 的最新版本,网上的教程大多停留在 MySQL 5.x,所以...

16330
来自专栏Python爬虫实战

MySQL 从零开始:07 数据搜索与搜索

数据库表中包含了很多数据,一般我们不会检索表中的所有行。通常会根据特定的条件来提取出表的子集,此时我们需要指定搜索条件(search criteria),搜索条...

12420
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-词法分析

sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文...

18220
来自专栏数据和云

DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据...

39260
来自专栏IT技术精选文摘

10分钟让你明白MySQL是如何利用索引的

一、前言 在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑。 譬如: MySQL 在遇到范围查询条件的时候就停止匹配了...

25470

扫码关注云+社区

领取腾讯云代金券