1. 进入.html文件确定请求的地址 {%block form%}
p{ margin:0; } #container{ width:990px; margin:0 auto; } #container>h2{ color:#999; font-weight:normal; margin:50px 0 30px 0; padding-bottom:15px; border-bottom:1px solid #ccc; } #container>p.user-pic{ float:left; } #user-login{ float:right; margin-right:40px; margin-top:80px; } #user-login .form-line{ overflow:hidden; margin-bottom:20px; } #user-login .form-line>p{ float:left; /*宽度,文本右对齐,右外边距,行高,文本颜色*/ width:64px; text-align:right; margin-right:40px; line-height:40px; color:#999; height:40px; } #user-login .form-line>div{ float:left; } #uphone,#upwd{ /*宽度,高度,边框,内边距*/ width:278px; height:38px; border:1px solid #ccc; padding:0 10px; color:#555; /*取消轮廓,文本大小*/ outline:none; font-size:18px; } #uphone:focus,#upwd:focus{ border-color:#64A131; box-shadow:0 0 2px #64A131; } #user-login .forget-pwd{ width:300px; } #user-login .forget-pwd p{ float:right; } #user-login .forget-pwd a{ color:#999; text-decoration:underline; } #user-login .forget-pwd input{ width:18px; height:18px; vertical-align:middle; } #user-login .form-btn{ width:300px; } #user-login .form-btn .register{ float:right; width:143px; height:38px; border:1px solid #64A131; background:#F5FFED; border-radius:5px; font-size:18px; text-decoration:none; color:#64a131; text-align:center; line-height:40px; } #user-login .form-btn input{ /*宽度,高度,取消边框,边框倒角,背景颜色,文本颜色,文字大小*/ width:145px; height:40px; border:none; border-radius:5px; background:#64a131; color:#fff; font-size:18px; } /**绝对定位练习*/ #container p.user-pic{ /*目的是为了配合 a 标记做绝对定位*/ position:relative; } #container p.user-pic a{ position:absolute; left:175px; bottom:20px; /*宽度,高度,边框,倒角,文字大小,颜色,水平居中,垂直居中*/ width:153px; height:48px; border:1px solid #64A131; border-radius:5px; font-size:18px; color:#64a131; text-align:center; line-height:50px; text-decoration:none; } #uphone_err{ margin-top:10px; }
.form-control{ /*宽度,高度,边框,内边距*/ width:278px; height:38px; border:1px solid #ccc; padding:0 10px; color:#555; /*取消轮廓,文本大小*/ outline:none; font-size:18px; } .form-control:focus{ border-color:#64A131; box-shadow:0 0 2px #64A131; } #user-login{ margin-top:40px; }
{%extends 'login.html'%} {%load static%} {%block style%} <link rel="stylesheet" href="{%static 'css/register.css'%}"> {%endblock%} {%block title%} 注册会员 {%endblock%} {%block btn%} <a href="{%url 'login'%}">会员登录</a> {%endblock%} {%block form%} <form action="/register/" method="post"> {%csrf_token%} <div class="form-line"> <p>手机号</p> <div> <input type="text" name="uphone" class="form-control"> <p id="uphone_err"> {{errMsg}} </p> </div> </div> <div class="form-line"> <p>密码</p> <div> <input type="password" name="upwd" class="form-control"> </div> </div> <div class="form-line"> <p>确认密码</p> <div> <input type="password" id="cpwd" class="form-control"> </div> </div> <div class="form-line"> <p>用户名称</p> <div> <input type="text" name='uname' class="form-control"> </div> </div> <div class="form-line"> <p>邮箱</p> <div> <input type="email" name="uemail" class="form-control"> </div> </div> <div class="form-line"> <p></p> <div class="form-btn"> <a href="{%url 'login'%}" class="register">会员登录</a> <input type="submit" value="注册"> </div> </div> </form> {%endblock%}
from django.db import models # Create your models here. class Users(models.Model): uphone = models.CharField(max_length=20, verbose_name='联系方式') upass = models.CharField(max_length=50, verbose_name='密码') uemail = models.EmailField(verbose_name='邮箱') uname = models.CharField(max_length=20, null=True, 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 class GoodsType(models.Model): title = models.CharField(max_length=30, verbose_name='类型名称') desc = models.TextField(null=True, 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 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='销售中') goodsType = models.ForeignKey(GoodsType, null=True) def __str__(self): return self.title class Meta: db_table = 'goods' verbose_name = '商品信息' verbose_name_plural = verbose_name
from django.conf.urls import url from .views import * urlpatterns = [ url(r'^login/$', login_views,name='login'), url(r'^register/$', register_views,name='register'), ]
from django.shortcuts import render from django.http import HttpResponse from .models import * # Create your views here. def login_views(request): # 判断request.method是get还是post if request.method == 'GET': return render(request, 'login.html') else: uphone = request.POST.get('uphone', '') upwd = request.POST.get('upwd', '') # if uphone and upwd: # users = Users.objects.filter(uphone=uphone, upass=upwd) # if users: # return HttpResponse('登录成功!!') # else: # errMsg = '手机号或密码不正确' # return render(request, 'login.html', locals()) if uphone and upwd: users = Users.objects.filter(uphone=uphone) if users: u = users[0] if upwd == u.upass: return HttpResponse('登录成功') else: errMsg = '对不起,输入的密码不正确' return render(request, 'login.html', locals()) else: errMsg = '对不起,手机号码不存在' return render(request, 'login.html', locals()) else: errMsg = '手机号或密码不能为空' return render(request, 'login.html', locals()) def register_views(request): # 判断request.method 得到用户的意图 if request.method == 'GET': return render(request, 'register.html') else: # 实现注册操作 uphone = request.POST.get('uphone', '') upwd = request.POST.get('upwd', '') uname = request.POST.get('uname', '') uemail = request.POST.get('uemail', '') if uphone and upwd and uname and uemail: # 先判断uphone的数据是否存在 u = Users.objects.filter(uphone=uphone) if u: errMsg = '手机号码已存在' return render(request, 'register.html', locals()) else: Users.objects.create(uphone=uphone, upass=upwd, uname=uname, uemail=uemail) return HttpResponse('注册成功!!!') else: return HttpResponse('数据不能为空')
{%load static%} <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="{%static 'css/login.css'%}"> <script src="{%static 'js/jquery-1.11.3.js'%}"></script> <script src="{%static 'js/login.js'%}"></script> {%block style%} {%endblock%} </head> <body> <div id="container"> <!-- 1、上 :会员登录 --> <h2> {%block title%} 会员登录 {%endblock%} </h2> <!-- 2、下:左,登录图像 --> <p class="user-pic"> <img src="{%static 'images/huiyuan.jpg'%}"> <!-- 会员注册超链接 --> {%block btn%} <a href="{%url 'register'%}">会员注册</a> {%endblock%} </p> <!-- 3、下:右,表单以及控件 --> <div id="user-login"> {%block form%} <form action="/login/" method="post"> {%csrf_token%} <!-- 1、第一行:手机号 --> <div class="form-line"> <!-- 左:文本,手机号<p> --> <p>手机号</p> <!-- 右:文本框 <div> --> <div> <input type="text" id="uphone" name="uphone" value="{{u.uphone}}"> <p id="uphone_err"> {{errMsg}} </p> </div> </div> <!-- 2、密码 --> <div class="form-line"> <p>密码</p> <div> <input type="password" id="upwd" name="upwd"> </div> </div> <!-- 3、记住密码 --> <div class="form-line"> <p></p> <div class="forget-pwd"> <p> <a href="#">忘记密码?</a> <a href="#">快捷登录</a> </p> <input type="checkbox" name="isSave"> 记住密码 </div> </div> <!-- 4、登录 & 注册会员 --> <div class="form-line"> <p></p> <div class="form-btn"> <a href="#" class="register">注册会员</a> <input type="submit" value="登录"> </div> </div> </form> {%endblock%} </div> <!-- 4、增加空块级元素,将container撑起来 --> <div style="clear:both;"></div> </div> </body> </html>