基于Flask开发的前后端分离租房项目(一)

 一、明确前后端分离和前后端不分离的概念:

我的理解:前后端不分离的概念是后端要控制前端的数据显示和模板渲染(django),它有一个缺点就是可复用性不强,也就是它的后端程序只适用于一种前端类型,比如返回的是网页模板,则它只能用于网页端,移动端要用只能重新渲染一个移动端的模板。

而前后端分离则解决了这一问题,它的可复用性极强,一个后端可对接多个类型的前端,因为它不使用模板,而是通过向前端传递json数据的方式,将页面渲染和显示数据交给前端去做。这样写出来的后端可以适用于任何类型的前端。

二、项目的数据库设计:

三、模型类设计

class BaseModel(object):

"""模型基类,为每个模型补充创建时间与更新时间"""

    create_time = db.Column(db.DateTime, default=datetime.now) # 记录的创建时间

    update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间

class User(BaseModel, db.Model):

"""用户"""

    __tablename__ = "ih_user_profile"

    id = db.Column(db.Integer, primary_key=True) # 用户编号

    name = db.Column(db.String(32), unique=True, nullable=False) # 用户暱称

    password_hash = db.Column(db.String(128), nullable=False) # 加密的密码

    mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号

    real_name = db.Column(db.String(32)) # 真实姓名

    id_card = db.Column(db.String(20)) # 身份证号

    avatar_url = db.Column(db.String(128)) # 用户头像路径

    houses = db.relationship("House", backref="user") # 用户发布的房屋

    orders = db.relationship("Order", backref="user") # 用户下的订单

class Area(BaseModel, db.Model):

"""城区"""

    __tablename__ = "ih_area_info"

    id = db.Column(db.Integer, primary_key=True) # 区域编号

    name = db.Column(db.String(32), nullable=False) # 区域名字

    houses = db.relationship("House", backref="area") # 区域的房屋

# 房屋设施表,建立房屋与设施的多对多关系

house_facility = db.Table(

    "ih_house_facility",

    db.Column("house_id", db.Integer, db.ForeignKey("ih_house_info.id"), primary_key=True), # 房屋编号

    db.Column("facility_id", db.Integer, db.ForeignKey("ih_facility_info.id"), primary_key=True) # 设施编号

)

class House(BaseModel, db.Model):

"""房屋信息"""

    __tablename__ = "ih_house_info"

    id = db.Column(db.Integer, primary_key=True) # 房屋编号

    user_id = db.Column(db.Integer, db.ForeignKey("ih_user_profile.id"), nullable=False) # 房屋主人的用户编号

    area_id = db.Column(db.Integer, db.ForeignKey("ih_area_info.id"), nullable=False) # 归属地的区域编号

    title = db.Column(db.String(64), nullable=False) # 标题

    price = db.Column(db.Integer, default=0) # 单价,单位:分

    address = db.Column(db.String(512), default="") # 地址

    room_count = db.Column(db.Integer, default=1) # 房间数目

    acreage = db.Column(db.Integer, default=0) # 房屋面积

    unit = db.Column(db.String(32), default="") # 房屋单元, 如几室几厅

    capacity = db.Column(db.Integer, default=1) # 房屋容纳的人数

    beds = db.Column(db.String(64), default="") # 房屋床铺的配置

    deposit = db.Column(db.Integer, default=0) # 房屋押金

    min_days = db.Column(db.Integer, default=1) # 最少入住天数

    max_days = db.Column(db.Integer, default=0) # 最多入住天数,0表示不限制

    order_count = db.Column(db.Integer, default=0) # 预订完成的该房屋的订单数

    index_image_url = db.Column(db.String(256), default="") # 房屋主图片的路径

    facilities = db.relationship("Facility", secondary=house_facility) # 房屋的设施

    images = db.relationship("HouseImage") # 房屋的图片

    orders = db.relationship("Order", backref="house") # 房屋的订单

class Facility(BaseModel, db.Model):

"""设施信息"""

    __tablename__ = "ih_facility_info"

    id = db.Column(db.Integer, primary_key=True) # 设施编号

    name = db.Column(db.String(32), nullable=False) # 设施名字

class HouseImage(BaseModel, db.Model):

"""房屋图片"""

    __tablename__ = "ih_house_image"

    id = db.Column(db.Integer, primary_key=True)

    house_id = db.Column(db.Integer, db.ForeignKey("ih_house_info.id"), nullable=False) # 房屋编号

    url = db.Column(db.String(256), nullable=False) # 图片的路径

class Order(BaseModel, db.Model):

"""订单"""

    __tablename__ = "ih_order_info"

    id = db.Column(db.Integer, primary_key=True) # 订单编号

    user_id = db.Column(db.Integer, db.ForeignKey("ih_user_profile.id"), nullable=False) # 下订单的用户编号

    house_id = db.Column(db.Integer, db.ForeignKey("ih_house_info.id"), nullable=False) # 预订的房间编号

    begin_date = db.Column(db.DateTime, nullable=False) # 预订的起始时间

    end_date = db.Column(db.DateTime, nullable=False) # 预订的结束时间

    days = db.Column(db.Integer, nullable=False) # 预订的总天数

    house_price = db.Column(db.Integer, nullable=False) # 房屋的单价

    amount = db.Column(db.Integer, nullable=False) # 订单的总金额

    status = db.Column( # 订单的状态

        db.Enum(

            "WAIT_ACCEPT", # 待接单,

            "WAIT_PAYMENT", # 待支付

            "PAID", # 已支付

            "WAIT_COMMENT", # 待评价

            "COMPLETE", # 已完成

            "CANCELED", # 已取消

            "REJECTED" # 已拒单

        ),

    default="WAIT_ACCEPT", index=True)

    comment = db.Column(db.Text) # 订单的评论信息或者拒单原因

四、数据库迁移

            python manage.py db init

            python manage.py db migrate -m 'init tables'

五、项目架构

5.1项目的整体目录如下图所示:

         

5.2 ihome的目录结构:

     

六、项目整体架构配置:

6.1主目录下config.py文件主要是配置数据库和redis缓存

6.2 ihome目录下的__init__.py文件主要是创建app对象:

6.3主目录下的manage.py用来运行项目代码:

6.4 ihome目录下的web_html.py文件用来配置静态文件的蓝图

6.5在ihome/utils/commons.py文件中定义正则转换器:

猜你喜欢

转载自blog.csdn.net/qq_40652101/article/details/89919916