Flask项目实战-积分商城管理端笔记

Flask项目实战-积分商城管理端

搭建项目

在这里插入图片描述
新建一个名为flask_mall的项目
在这里插入图片描述
进行数据库配置,引入SQLAlchemy
把Flask实列(app)传给SQLAlchemy得到数据库实例
指定数据库连接配置

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/flask_mall'
db = SQLAlchemy(app)

@app.route('/')
def hello_world():
	return 'Hello World!'

定义模型app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/flask_mall'
db = SQLAlchemy(app)

class Tag(db.Model):
	""" 商品标签 """
    __tablename__ = 'product_tag'
    id = db.Column(db.Integer,primary_key=True) # 主键
    # UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
    # 标签名称
    name = db.Column(db.String(128),nullable=False)
    # 标签编码
    code = db.Column(db.String(32))
    # 标签的描述
    desc=db.Column(db.String(256))
    # 逻辑删除
    is_valid = db.Column(db.Boolean,default=True)
    # 排序
    reorder = db.Column(db.Integer,default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime)

class Classify(db.Model):
    """ 商品分类 """   
    __tablename__ = 'product_classify'
    id = db.Column(db.Integer,primary_key=True) # 主键
    # UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
   	# 关联父级的ID
    parent_id = db.Column(db.Integer, db.ForeignKey('product_classify.id'))
    # 图片
    img = db.Column(db.String(256))
    # 分类名称
    name = db.Column(db.String(128), nullable=False)
    # 分类编码
    code = db.Column(db.String(32))
    # 分类的描述
    desc = db.Column(db.String(256))
    # 逻辑删除
    is_valid = db.Column(db.Boolean, default=True)
    # 排序
    reorder = db.Column(db.Integer, default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime) 

class Product(db.Model): 
    """ 商品类 """  
    __tablename_ = 'product' 
    id = db.Column(db.Integer,primary_key=True) # 主键
	# UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
    # 商品标题
    name = db.Column(db.String(128), nullable=False)
    # 商品描述
    content = db.Column(db.Text, nullable=False)
    # 商品推荐语
    desc = db.Column(db.String(256))
    # 类型
    types = db.Column(db.String(10),nullable=False)
    # 价格
    price = db.Column(db.Integer, nullable=False)
    # 原价¥
    origin_price = db.Column(db.Float)
    # 主图
    img = db.Column(db.String(256),nullable=True)
    # 渠道
    channel = db.Column(db.String(32))
    # 链接
    buy_link = db.Column(db.String(256))
    # 商品状态
    status = db.Column(db.String(10),nullable=False)
    # 库存
    sku_count = db.Column(db.Integer,default=0)
    # 剩余库存
    remain_count = db.Column(db.Integer,default=0)
    # 浏览次数
    view_count = db.Column(db.Integer,default=0)
    # 评分
    score = db.Column(db.Float,default=10)

    # 逻辑删除
    is_valid = db.Column(db.Boolean, default=True)
    # 排序
    reorder = db.Column(db.Integer, default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime)

class ProductClasses(db.Model):
    """商品与分类的关系"""
    __tablename__ = 'product_classify_rel'
    id = db.Column(db.Integer,primary_key=True) # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    cls_id = db.Column(db.Integer,db.ForeignKey('product_classify.id'))

class ProductTags(db.Model):
    """商品与标签的关系"""
    __tablename__ = 'product_tag_rel'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    tag_id = db.Column(db.Integer, db.ForeignKey('product_tag.id'))
    
@app.route('/')
def hello_world():
	return 'Hello World!'

将模型同步到数据库
在这里插入图片描述
## 新的改变

实现商品的添加,上传图片

下载Bootstrap,并将bootstrap文件夹放入static目录下
下载jQuery1.12.4版本,将压缩包解压后的dist文件夹放入static目录并修改文件夹名称为jquery。
在这里插入图片描述
复制bootstrap基本模板
在这里插入图片描述
在template下新建index.html,并将基本模板的HTML代码粘贴到index.html

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <h1>你好,世界!</h1>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
  </body>
</html>

定义路由app.py (在代码最后), 引入render_template

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/flask_mall'
db = SQLAlchemy(app)

class Tag(db.Model):
	""" 商品标签 """
	__tablename__ = 'product_tag'
	 id = db.Column(db.Integer,primary_key=True) # 主键
	# UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
    # 标签名称
    name = db.Column(db.String(128),nullable=False)
    # 标签编码
    code = db.Column(db.String(32))
    # 标签的描述
    desc=db.Column(db.String(256))
    # 逻辑删除
    is_valid = db.Column(db.Boolean,default=True)
    # 排序
    reorder = db.Column(db.Integer,default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime)

class Classify(db.Model):
	""" 商品分类 """
	__tablename__ = 'product_classify'
	 id = db.Column(db.Integer,primary_key=True) # 主键
	 # UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
   	# 关联父级的ID
    parent_id = db.Column(db.Integer, db.ForeignKey('product_classify.id'))
    # 图片
    img = db.Column(db.String(256))
    # 分类名称
    name = db.Column(db.String(128), nullable=False)
    # 分类编码
    code = db.Column(db.String(32))
    # 分类的描述
    desc = db.Column(db.String(256))
    # 逻辑删除
    is_valid = db.Column(db.Boolean, default=True)
    # 排序
    reorder = db.Column(db.Integer, default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime) 

class Product(db.Model):
	""" 商品类 """
	__tablename_ = 'product'
	 id = db.Column(db.Integer,primary_key=True) # 主键
	# UID
    uid = db.Column(db.String(128), nullable=False, default=uuid.uuid4, unique=True)
    # 商品标题
    name = db.Column(db.String(128), nullable=False)
    # 商品描述
    content = db.Column(db.Text, nullable=False)
    # 商品推荐语
    desc = db.Column(db.String(256))
    # 类型
    types = db.Column(db.String(10),nullable=False)
    # 价格
    price = db.Column(db.Integer, nullable=False)
    # 原价¥
    origin_price = db.Column(db.Float)
    # 主图
    img = db.Column(db.String(256),nullable=True)
    # 渠道
    channel = db.Column(db.String(32))
    # 链接
    buy_link = db.Column(db.String(256))
    # 商品状态
    status = db.Column(db.String(10),nullable=False)
    # 库存
    sku_count = db.Column(db.Integer,default=0)
    # 剩余库存
    remain_count = db.Column(db.Integer,default=0)
    # 浏览次数
    view_count = db.Column(db.Integer,default=0)
    # 评分
    score = db.Column(db.Float,default=10)

    # 逻辑删除
    is_valid = db.Column(db.Boolean, default=True)
    # 排序
    reorder = db.Column(db.Integer, default=0)
    # 创建时间
    created_at = db.Column(db.DateTime)
    # 最后修改的时间
    updated_at = db.Column(db.DateTime)

class ProductClasses(db.Model):
    """商品与分类的关系"""
    __tablename__ = 'product_classify_rel'
    id = db.Column(db.Integer,primary_key=True) # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    cls_id = db.Column(db.Integer,db.ForeignKey('product_classify.id'))

class ProductTags(db.Model):
    """商品与标签的关系"""
    __tablename__ = 'product_tag_rel'
    id = db.Column(db.Integer, primary_key=True)  # 主键
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    tag_id = db.Column(db.Integer, db.ForeignKey('product_tag.id'))
    
@app.route('/')
def index():
	return render_template('mall/index.html')

将bootstrap.min.css/jquery.min.js/bootstrap.min.js的src修改为本地,
使用url_for()表示文件路径,_external=True显示绝对路径

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="{
   { url_for('static', filename='bootstrap/css/bootstrap.min.css', _external=True) }}" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <h1>你好,世界!</h1>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="{
   { url_for('static', filename='jquery/jquery.min.js', _external=True) }}"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="{
   { url_for('static', filename='bootstrap/js/bootstrap.min.js', _external=True) }}"></script>
  </body>
</html>

选择一个bootstrap实例,引用该模板的源代码,粘贴到index.html body 标签后面
在这里插入图片描述

<nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值