(1)admin.py
from django.contrib import admin from . models import UserProfile,EmailVerfiyRecord # Register your models here. # 注册自定义的用户模型 class UserProfileAdmin(admin.ModelAdmin): # 展示的字段 list_display = ['username','nick_name','email','birday','mobile','address'] # 根据某些字段进行搜索,一般不会填写带有时间和日期的字段 search_fields = ['username','nick_name','email','mobile'] # 筛选器 带有时间和日期的字段可以放在筛选器中 list_filter = ['birday','date_joined'] class EmailAdmin(admin.ModelAdmin): list_display = ['code','email','send_time','send_type'] search_fields = ['code','email'] list_filter = ['send_time','exprie_time'] # 注册数据模型和后台管理类 admin.site.register(UserProfile,UserProfileAdmin) admin.site.register(EmailVerfiyRecord,EmailAdmin)
(2)forms.py
from django import forms # 引入验证码中的CaptchaField from captcha.fields import CaptchaField # 表单 class RegisterFrom(forms.Form): # 邮箱 email = forms.EmailField(required=True,error_messages={'invalid':'请填写正确的邮箱地址'}) # 密码 password = forms.CharField(required=True,min_length=6,error_messages={'invalid':'密码不能少于6位'}) rePassword = forms.CharField(required=True, min_length=6, error_messages={'invalid': '密码不能少于6位'}) # 验证码 captcha = CaptchaField(required=True,error_messages={'invalid':'验证码错误'})
(3)models.py
from django.db import models # Create your models here. # 引入默认的用户模型类 from django.contrib.auth.models import AbstractUser # 为什么要自定义用户表? # 因为默认的用户表字段满足不了注册信息的需求 class UserProfile(AbstractUser): # 昵称 # CharField max_length是必填参数 # verbose_name 后台管理界面中显示字段信息 nick_name = models.CharField(max_length=20,verbose_name='昵称',default='') # 生日 # blank=True 前端表单中的数据可以为空 birday = models.DateTimeField(verbose_name='生日',null=True,blank=True) # 住址 address = models.CharField(max_length=50,verbose_name='地址',default='') # 电话 mobile = models.CharField(max_length=11,verbose_name='手机',default='') # 头像 image = models.ImageField(upload_to='images/%Y/%m',default='images/default.png',verbose_name='头像') class Meta: db_table = 'Users' # 后台管理界面中显示的表信息 verbose_name = '用户信息' verbose_name_plural = verbose_name # 邮箱验证类 # 引入datetime from datetime import datetime class EmailVerfiyRecord(models.Model): # 验证码 code = models.CharField(max_length=20,verbose_name='验证码') # 接收的用户邮箱 email = models.EmailField(max_length=50,verbose_name='用户邮箱') # 发送时间 # datetime.now 在创建对象的时候,再执行函数获取时间 send_time = models.DateTimeField(default=datetime.now,verbose_name='发送时间') # 过期时间 exprie_time = models.DateTimeField(null=True) # 邮件类型 1.注册邮件 2.找回密码邮件 # choices 枚举选项 ,必须从指定的项中选择一个 send_type = models.CharField(choices=(('register','注册邮件'),('forget','找回密码')),max_length=10) class Meta: verbose_name = '邮箱验证码' verbose_name_plural = verbose_name
(4)模板:
<form class="form-signin"> <h2 class="form-signin-heading text-center">请登录</h2> <label for="inputEmail" class="sr-only">邮箱地址</label> <input type="email" id="inputEmail" class="form-control" placeholder="邮箱地址" required autofocus> <label for="inputPassword" class="sr-only">密码</label> <input type="password" id="inputPassword" class="form-control" placeholder="密码" required> <button class="btn btn-lg btn-primary btn-block" type="submit">登陆</button> </form> <h3 class="text-center"><a href="register.html">没有账号?去注册</a></h3>
<style> .errorlist{ padding-left: 0; } .errorlist > li{ list-style: none; color: red; font-size: 19px; } .errborder{ border-color: red; box-shadow: 0 0 5px red; } </style> </head> <body> <div class="container"> <form class="form-signin" action="{% url 'register' %}" method="post"> {% csrf_token %} <h2 class="form-signin-heading text-center">注册账户</h2> <label for="inputEmail" class="sr-only">邮箱地址</label> {# 判断form中是否含有email数据 #} <input name="email" type="text" id="inputEmail" class="form-control {% if errMsg %}errborder{% endif %}" placeholder="邮箱地址" required value="{% if form.email.value %} {{ form.email.value }} {% endif %}"> {% if errMsg %} <h4>{{ errMsg }}</h4> {% endif %} {{ form.email.errors }} <label for="inputPassword" class="sr-only">密码</label> <input name="password" type="password" id="inputPassword" class="form-control {% if error %}errborder{% endif %}" placeholder="密码" required value="{% if form.password.value %}{{ form.password.value }}{% endif %}"> {{ form.password.errors }} <label for="rePassword" class="sr-only">确认密码</label> <input name="rePassword" type="password" id="rePassword" class="form-control {% if error %}errborder{% endif %}" placeholder="确认密码" required value="{% if form.password.value %}{{ form.password.value }}{% endif %}"> {% if error %} <h3>{{ error }}</h3> {% endif %} {{ form.captcha }} {{ form.captcha.errors }} <button class="btn btn-lg btn-primary btn-block" type="submit">注册</button> </form> <h3 class="text-center"><a href="login.html">已有账号?去登陆</a></h3> </div> <!-- /container --> </body> </html>
==============================