后台管理与form表单

本文详细介绍了在Django中如何配置admin.py实现后台管理,创建forms.py进行表单验证,models.py定义数据模型,以及如何设计模板完成前端展示。通过实例解析了后台管理系统与前端表单交互的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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>



==============================

总结:












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值