概念
本文在上一文章搭建完数据库,以及创建好项目之后,以及前端静态文件后,对项目的首页功能开发。
后端代码编写
这里我们使用pymysql模块对数据库进行操作,获取数据。因此需要在dos窗口使用以下指令下载该库文件
pip install pymysql
在views.py文件中创建方法,连接数据库,并获取首页需要的数据
# Create your views here.
con = pymysql.connect(host="127.0.0.1", port=3306,user="root", password="admin",db="cookieshop", charset="utf8")
# 获得游标
cursor = con.cursor()
def getGoodsList(type):# 根据类型查询商品列表信息cursor.execute("select g.id,g.name,g.cover,g.price,t.name as typename from recommend r,goods g,type t where type=%s and r.goods_id=g.id and g.type_id=t.id",(type))newList=cursor.fetchall()ns=[]for new in newList:n={"id":new[0],"name":new[1],"cover":new[2],"price":new[3],"typename":new[4]}ns.append(n)return ns
def index(request):# 查询所有蛋糕商品分类名称cursor.execute("select * from type")types=cursor.fetchall()ts=[]for type in types:t=Type(type[0],type[1])ts.append(t)# 查询推荐栏的商品信息cursor.execute("select g.id,g.name,g.cover,g.price from recommend r,goods g where r.goods_id=g.id")scrolls=cursor.fetchall()ss=[]for scroll in scrolls:s={"id":scroll[0],"name":scroll[1],"cover":scroll[2],"price":scroll[3]}ss.append(s)newList=getGoodsList(3)hotList=getGoodsList(2)return render(request,"index.html",{"typeList":ts,"scroll":ss,"newList":newList,"hotList":hotList} )
在models.py文件中创建Type实体类
#商品分类表
class Type(object):def __init__(self,id,name):""":param id: 商品分类id:param name: 商品分类名称"""self.id=idself.name=name
前端页面搭建
在子项目中创建templates文件夹,在该文件夹下创建header.html,foot.html以及index.html作为首页的前端内容
header.html
<div class="header"><div class="container"><nav class="navbar navbar-default" role="navigation"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><h1 class="navbar-brand"><a href="/index"></a></h1></div><!--navbar-header--><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/index"{% if flag == 1 %}class="active"{% endif %}>首页</a></li><li class="dropdown"><a href="#" class="dropdown-toggle{% if flag == 2 %}active{% endif %}" data-toggle="dropdown">商品分类<b class="caret"></b></a><ul class="dropdown-menu multi-column columns-2"><li><div class="row"><div class="col-sm-12"><h4>商品分类</h4><ul class="multi-column-dropdown"><li><a class="list" href="/goods_list">全部系列</a></li>{% for t in typeList%}<li><a class="list" href="/goods_list?typeid={{ t.id }}">{{t.name}}</a></li>{% endfor %}</ul></div></div></li></ul></li><li><a href="/goodsrecommend_list?type=2" {% if flag == 3 and t == 2 %} class="active" {% endif %}>热销</a></li><li><a href="/goodsrecommend_list?type=3" {% if flag == 3 and t == 3 %} class="active" {% endif %}>新品</a></li>{% if user %}<li><a href="/order_list" {% if flag == 5 %} class="active" {% endif %}>我的订单</a></li><li><a href="/user_center.jsp" {% if flag == 4 %} class="active" {% endif %}>个人中心</a></li><li><a href="/user_logout" >退出</a></li>{% else %}<li><a href="/user_register.jsp" {% if flag == 10 %} class="active" {% endif %}>注册</a></li><li><a href="/user_login.jsp" {% if flag == 9 %} class="active" {% endif %}>登录</a></li>{% endif %}{% if user and user.isadmin %}<li><a href="/admin/index.jsp" target="_blank">后台管理</a></li>{% endif %}</ul><!--/.navbar-collapse--></div><!--//navbar-header--></nav><div class="header-info"><div class="header-right search-box"><a href="javascript:;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></a><div class="search"><form class="navbar-form" action="/goods_search"><input type="text" class="form-control" name="keyword"><button type="submit" class="btn btn-default{% if flag == 7 %}active{% endif %}" aria-label="Left Align">搜索</button></form></div></div><div class="header-right cart"><a href="goods_cart.jsp"><span class="glyphicon glyphicon-shopping-cart{% if flag == 8 %}active{% endif %}" aria-hidden="true"><span class="card_num">{% if order %}{{ order.amount }}{% else %}0{% endif %}</span></span></a></div><div class="clearfix"> </div></div><div class="clearfix"> </div></div>
</div>
foot.html
<div class="footer"><div class="container"><div class="text-center"></div></div>
</div>
index.html
<!DOCTYPE html>
<html>
<head>{% load static %}<title>首页</title><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.css' %}"><link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"><script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script><script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script><script type="text/javascript" src="{% static 'layer/layer.js' %}"></script><script type="text/javascript" src="{% static 'js/cart.js' %}"></script>
</head>
<body>
<!--header-->
{% include "header.html" with flag=1 typeList=typeList %}
<!--banner--><div class="banner"><div class="container"><div id="carousel-example-generic" class="carousel slide" data-ride="carousel"><!-- Indicators --><ol class="carousel-indicators" id="olnum">{% for g in scroll %}{% if forloop.first %}<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>{% else %}<li data-target="#carousel-example-generic" data-slide-to="{{ forloop.counter0 }}"></li>{% endif %}{% endfor %}</ol><!-- Wrapper for slides --><div class="carousel-inner" role="listbox" id="lunbotu" style="width: 1242px; height: 432px;">{% for g in scroll %}{% if forloop.first %}<div class="item active"><h2 class="hdng"><a href="/goods_detail?id={{ g.id }}">{{ g.name }}</a><span></span></h2><p>今日精选推荐</p><a class="banner_a" href="javascript:;" onclick="buy({{ g.id }})">立刻购买</a><div class="banner-text"><a href="/goods_detail?id={{ g.id }}"><img src="{% static g.cover %}" alt="{{ g.name }}" width="350" height="350"></a></div></div>{% else %}<div class="item"><h2 class="hdng"><a href="/goods_detail?id={{ g.id }}">{{ g.name }}</a><span></span></h2><p>今日精选推荐</p><a class="banner_a" href="javascript:;" onclick="buy({{ g.id }})">立刻购买</a><div class="banner-text"><a href="/goods_detail?id={{ g.id }}"><img src="{% static g.cover %}" alt="{{ g.name }}" width="350" height="350"></a></div></div>{% endif %}{% endfor %}</div></div></div>
</div><!--//banner--><div class="subscribe2"></div><!--gallery-->
<div class="gallery"><div class="container"><div class="alert alert-danger">热销推荐</div><div class="gallery-grids">{% for g in hotList %}<div class="col-md-4 gallery-grid glry-two"><a href="/goods_detail?id={{ g.id }}"><img src="{% static g.cover %}" class="img-responsive" alt="{{ g.name }}" width="350" height="350"/></a><div class="gallery-info galrr-info-two"><p><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span><a href="/goods_detail?id={{ g.id }}">查看详情</a></p><a class="shop" href="javascript:;" onclick="buy({{ g.id }})">立刻购买</a><div class="clearfix"></div></div><div class="galy-info"><p>{{ g.typeName }} > {{ g.name }}</p><div class="galry"><div class="prices"><h5 class="item_price">¥ {{ g.price }}</h5></div><div class="clearfix"></div></div></div></div>{% endfor %}</div><div class="clearfix"></div><div class="alert alert-info">新品推荐</div><div class="gallery-grids">{% for g in newList %}<div class="col-md-3 gallery-grid "><a href="/goods_detail?id={{ g.id }}"><img src="{% static g.cover %}" class="img-responsive" alt="{{ g.name }}"/></a><div class="gallery-info"><p><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span><a href="/goods_detail?id={{ g.id }}">查看详情</a></p><a class="shop" href="javascript:;" onclick="buy({{ g.id }})">立刻购买</a><div class="clearfix"></div></div><div class="galy-info"><p>{{ g.typeName }} > {{ g.name }}</p><div class="galry"><div class="prices"><h5 class="item_price">¥ {{ g.price }}</h5></div><div class="clearfix"></div></div></div></div>{% endfor %}</div></div>
</div>
<!--//gallery--><!--subscribe-->
<div class="subscribe"></div>
<!--//subscribe-->
<!--footer-->
{% include "footer.html" %}
</body>
</html>
在主项目的urls.py文件中定义请求地址,用于浏览器访问views.py文件
path('',vc.index),
在PyCharm的内置dos窗口中输入以下指令启动服务器
python manage.py runserver
浏览器中访问该地址