一、主文件的urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('index.urls')),
二、settings中数据库的设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fruitday',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306',
}
}
三、应用中的urls.py
from django.conf.urls import url
from .views import *
urlpatterns = [
# 访问路径 localhost:8000/
url(r'^$', index_views, name='index'),
# 访问路径 localhost:8000/login
url(r'^login/$', login_views, name='login'),
# 访问路径 localhost:8000/register
url(r'^register/$', register_views, name='register'),
]
四、views.py
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from .models import *
# Create your views here.
# def login_views(request):
# # 根据用户的请求意图决定该干什么事情
# if request.method == 'GET':
# # 1. if cookies contains uid & uphone
# if 'uid' in request.COOKIES and 'uphone' in request.COOKIES:
# return HttpResponseRedirect('/')
# else:
# return render(request, 'login.html')
# else:
# # 处理用户登录操作
# uphone = request.POST['uphone']
# upwd = request.POST['upwd']
# users = Users.objects.filter(uphone=uphone, upwd=upwd)
# if users:
# # 获取用户的ID
# uid = users[0].id
# # 创建 重定向响应对象
# resp = HttpResponseRedirect('/')
# # 判断是否记住密码
# if 'isSaved' in request.POST:
# # 将用户ID以及手机号保存进cookie
# expires = 60 * 60 * 24 * 366
# resp.set_cookie('uid', uid, expires)
# resp.set_cookie('uphone', uphone, expires)
# # 将响应对象响应给客户端
# return resp
# # return HttpResponseRedirect('/')
# else:
# errMsg = '用户名或密码不正确'
# return render(request, 'login.html', locals())
def index_views(request):
return render(request, 'index.html')
def register_views(request):
# return render(request, 'register.html')
# 根据用户的请求意图决定到底该做什么操作
# 如 :get 请求,查看注册页面
# 如 :post 请求,处理提交数据(注册)
if request.method == 'GET':
return render(request, 'register.html')
else:
uphone = request.POST['uphone']
# 判断uphone在数据库中是否存在
users = Users.objects.filter(uphone=uphone)
if users:
# 说明用户已经存在
errMsg = '电话号码已存在,请重新输入'
return render(request, 'register.html', locals())
upwd = request.POST['upwd']
uname = request.POST['uname']
uemail = request.POST['uemail']
Users.objects.create(uphone=uphone, upwd=upwd,
uname=uname, uemail=uemail)
return HttpResponseRedirect('/login/')
def login_views(request):
# 判断是post 请求还是 get 请求
if request.method == 'POST':
# 实现登录操作
uphone = request.POST['uphone']
upwd = request.POST['upwd']
users = Users.objects.filter(uphone=uphone, upwd=upwd)
if users:
# 登录成功
# 将登录信息保存进session
request.session['id'] = users[0].id
request.session['uphone'] = uphone
# 创建响应对象
resp = HttpResponseRedirect('/')
# 判断是否要保存进 cookies
if 'isSaved' in request.POST:
# 需要保存进 cookies
expires = 60 * 60 * 24 * 366
resp.set_cookie('id', users[0].id, expires)
resp.set_cookie('uphone', uphone, expires)
return resp
else:
# 登录失败
errMsg = '用户名或密码不正确'
return render(request, 'login.html', locals())
else:
# GET 请求
# 判断 session 中是否有登录信息
if 'id' in request.session and 'uphone' in request.session:
# 重定向到首页
return HttpResponseRedirect('/')
else:
# session 中没有登录信息
# 判断 cookie 是否包含登录信息
if 'id' in request.COOKIES and 'uphone' in request.COOKIES:
# cookies 中包含登录信息
# 从cookies中获取登录信息并保存进session中
id = request.COOKIES['id']
uphone = request.COOKIES['uphone']
request.session['id'] = id
request.session['uphone'] = uphone
return HttpResponseRedirect('/')
else:
# cookies 中不包含登录信息
return render(request, 'login.html')
五、models.py的代码
from django.db import models
# Create your models here.
# 1. Users - 用户表
class Users(models.Model):
uphone = models.CharField(max_length=20, verbose_name='电话号码')
upwd = models.CharField(max_length=20, verbose_name='密码')
uemail = models.EmailField(verbose_name='电子邮件')
uname = models.CharField(max_length=50, verbose_name='用户名')
isActive = models.BooleanField(default=True, verbose_name='是否激活')
def __str__(self):
return self.uname
class Meta:
db_table = 'users'
verbose_name = '用户'
verbose_name_plural = verbose_name
# 2.GoodsType - 商品类型表
class GoodsType(models.Model):
title = models.CharField(max_length=30, verbose_name='类型标题')
desc = models.TextField(verbose_name='描述')
picture = models.ImageField(
upload_to='static/upload/goodstype', verbose_name='图片')
def __str__(self):
return self.title
class Meta:
db_table = 'goodstype'
verbose_name = '商品类型'
verbose_name_plural = verbose_name
# 3.Goods - 商品表
class Goods(models.Model):
title = models.CharField(max_length=100, verbose_name='商品名称')
price = models.DecimalField(
max_digits=7, decimal_places=2, verbose_name='商品价格')
spec = models.CharField(max_length=30, verbose_name='商品规格')
picture = models.ImageField(
upload_to='static/upload/goods', verbose_name='商品图片')
isActive = models.BooleanField(default=True, verbose_name='是否上架')
def __str__(self):
return self.title
class Meta:
db_table = 'goods'
verbose_name = '商品'
verbose_name_plural = verbose_name
六、admin.py
from django.contrib import admin
from .models import *
class UsersAdmin(admin.ModelAdmin):
list_display = ['uname', 'uphone', 'uemail']
list_display_links = ['uname', 'uphone', 'uemail']
search_fields = ['uname', 'uphone', 'uemail']
fields = ['uphone', 'uemail', 'uname', 'isActive']
# Register your models here.
admin.site.register(Users, UsersAdmin)
admin.site.register(GoodsType)
admin.site.register(Goods)
七、index.html
{% load static %}
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="{% static 'css/index.css'%}">
</head>
<body>
<div class="container">
<!-- 1、网页头部 -->
<div id="top">
<!-- 1.1 右:列表 -->
<ul id="list">
<li>
<a href="{% url 'login'%}">[登录]</a>
,
<a href="#">[注册有惊喜]</a>
</li>
<li>
<b></b>
果园公告
</li>
<li>
<b></b>
<a href="#">券卡兑换</a>
</li>
<li>
<b></b>
手机果园
</li>
</ul>
<!-- 1.2 左:三个超链接 -->
<!-- 1.2.1 上海 -->
<a href="#" class="address">
上海
<u></u>
</a>
<!-- 1.2.2 满百包邮 -->
<a>满百包邮(环郊内)</a>
<!-- 1.2.3 星夜达 -->
<a href="#" class="xing">星夜达</a>
</div>
<!-- 2、LOGO 和 热门搜索 -->
<!-- 3、BANNER广告(横幅广告) -->
<div id="banner">
<img src="{% static 'images/banner1.jpg'%}">
</div>
<!-- 4、四幅小广告 -->
<ul id="adv-img">
<li>
<a href="#">
<img src="/static/images/2ba20598135dbba5e97d241ebfa167d9.jpg">
</a>
</li>
<li>
<a href="#">
<img src="/static/images/25af37592bf484fbeaef1cc4ff1e09c7.jpg">
</a>
</li>
<li>
<a href="#">
<img src="/static/images/904419aa2e364412b3c07c3cbda24ef9.jpg">
</a>
</li>
<li class="no-margin">
<a href="#">
<img src="/static/images/d72b849b461c08d991c265df00a1bfde.jpg">
</a>
</li>
</ul>
<!-- 5、网页主体内容(各种产品) -->
<div id="main">
<!-- 5.1 礼品卡券 -->
<div class="item">
<!-- 5.1.1 上方 :标题 + 更多 -->
<p class="title">
<a href="#">更多</a>
<img src="{% static 'images/t4.png'%}">
</p>
<!-- 5.1.2 下方 :内容 -->
<ul>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li class="no-margin">
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li class="no-margin">
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
</ul>
</div>
<!-- 5.2 家庭量贩 -->
<div class="item">
<!-- 5.1.1 上方 :标题 + 更多 -->
<p class="title">
<a href="#">更多</a>
<img src="{% static 'images/t4.png'%}">
</p>
<!-- 5.1.2 下方 :内容 -->
<ul>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li class="no-margin">
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li>
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
<li class="no-margin">
<!-- 上 :图像 -->
<p>
<img src="{% static 'images/1-270x270-3877-BXDY6KCU.jpg' %}">
</p>
<!-- 下 :文本 -->
<div class="content">
<!-- 右:购物车图标 -->
<a href="#" class="cart">
<img src="{% static 'images/cart.png' %}">
</a>
<!-- 左上:商品名称 -->
<p>
欢乐时光水果礼篮
</p>
<!-- 左下:价格 + 规格 -->
<span>
¥188.00/1份
</span>
</div>
</li>
</ul>
</div>
<!-- 5.3 全球鲜果 -->
<!-- 5.4 生鲜美食 -->
</div>
<!-- 5、网页主体内容结束-->
<!-- 6、网页底部 -->
</div>
</body>
</html>
八、login.html
{% load static %}
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>
{% block title %}
天天果园-会员登录
{% endblock %}
</title>
<link rel="stylesheet" href="{% static 'css/login.css'%}">
{% block style %}
{% endblock %}
{% block js %}
{% endblock %}
</head>
<body>
<div id="container">
<!-- 上 :会员登录 -->
<h2>
{% block h2 %}
会员登录
{% endblock %}
</h2>
<!-- 下左:登录图像 -->
<p>
<img src="{% static 'images/huiyuan.jpg'%}">
{% block anchor %}
<a href="#">会员注册></a>
{% endblock %}
</p>
<!-- 下右:登录表单 -->
<div id="login">
{% block form %}
<form action="/login/" method="post">
{%csrf_token%}
<!-- 第一行:手机号 -->
<div class="form-line">
<p>手机号</p>
<div>
<input type="text" name="uphone" class="form-control">
<p>{{errMsg}}</p>
</div>
</div>
<!-- 第二行:密码 -->
<div class="form-line">
<p>密码</p>
<div>
<input type="password" name="upwd" class="form-control" placeholder="请输入密码">
</div>
</div>
<!-- 第三行:记住密码,忘记密码-->
<div class="form-line">
<p></p>
<div>
<!-- 右浮动 -->
<p>
<a href="#">忘记密码</a>
<a href="#">快捷登录</a>
</p>
<!-- 不浮动 -->
<input type="checkbox" name="isSaved" class="isSaved" checked>记住密码
</div>
</div>
<!-- 第四行:登录按钮-->
<div class="form-line">
<p></p>
<div>
<!-- 右:超链接 -->
<a href="#" class="goReg">注册会员</a>
<!-- 左:登录按钮 -->
<input type="submit" value="登录" class="btnLogin">
</div>
</div>
</form>
{% endblock %}
</div>
</div>
</body>
</html>
九、register.html
{% extends 'login.html' %}
{% load static %}
{% block title %}
天天果园 - 会员注册
{% endblock %}
{% block style %}
<style>
#login{
margin-top:25px;
}
</style>
{% endblock %}
{% block js %}
<script src="{% static 'js/jquery-1.11.3.js'%}"></script>
<script>
</script>
{% endblock %}
{% block h2 %}
注册会员
{% endblock %}
{% block anchor %}
<a href="#">会员登录></a>
{% endblock %}
{% block form %}
<form action="{% url 'register'%}" method="post" id="formReg">
{%csrf_token%}
<!-- 1. 手机号 -->
<div class="form-line">
<p>手机号</p>
<div>
<input type="text" name="uphone" class="form-control">
<p>{{errMsg}}</p>
</div>
</div>
<!-- 2. 密码 -->
<div class="form-line">
<p>密码</p>
<div>
<input type="password" name="upwd" class="form-control">
</div>
</div>
<!-- 3. 确认密码 -->
<div class="form-line">
<p>确认密码</p>
<div>
<input type="password" id="cpwd" class="form-control">
</div>
</div>
<!-- 4. 邮箱 -->
<div class="form-line">
<p>电子邮箱</p>
<div>
<input type="email" name="uemail" class="form-control">
</div>
</div>
<!-- 5. 用户名 -->
<div class="form-line">
<p>用户名</p>
<div>
<input type="text" name="uname" class="form-control">
</div>
</div>
<!-- 6. 按钮 -->
<div class="form-line">
<p></p>
<div>
<!-- 右:超链接 -->
<a href="#" class="goReg">会员登录</a>
<!-- 左:登录按钮 -->
<input type="submit" value="注册" class="btnLogin">
</div>
</div>
</form>
{% endblock %}