django学习入门系列之第十点《A 案例: 员工管理系统9》

server/2024/12/23 5:43:21/

文章目录

  • 12 管理员操作
    • 12.1 添加的界面集成
    • 12.2更改样式
    • 12.3验证密码
  • 往期回顾


12 管理员操作

12.1 添加的界面集成

  • 因为添加界面基本不用怎么改,所以可以直接集成进去
    • 需要再次改动的地方

这样的话相当于直接在视图界面上直接传就行了,来提高复用率

<div class="panel-heading">{{ title }}</div>
  • 添加的模板
{% extends 'model.html' %}
{% block content %}
<div><div class="container"><div class="panel panel-default"><div class="panel-heading">{{ title }}</div><div class="panel-body"><form class="form-inline" method="post" novalidate>{% csrf_token %}{% csrf_token %}{% for foo in form %}{{ foo.label }} : {{ foo }}<span style="color: red">{{ foo.errors.0 }}</span><div></div>{% endfor %}<button type="submit" class="btn btn-primary">提交</button></form></div></div></div>
</div>
{% endblock %}
  • 视图的界面
python">def admin_add(request):"""添加管理员"""form = AdminModelForm()return render(request, "add_model.html", {"form": form, "title": "新建管理员"})

12.2更改样式

  • 更改自定义样式

    • 在视图中新建样式
    python">confirm_password = forms.CharField(label="确认密码")
    
    • 更改
    python">confirm_password = forms.CharField(label="确认密码",widget=forms.PasswordInput,)
    
  • 更改在数据表那界面创建的数据

python">class Meta:model = models.Adminfields = ["username", 'password']widgets = {"password": forms.PasswordInput,}
  • 总体
python">class AdminModelForm(BootStrapModelForm):# 数据库定义两个字段,这里相当于再定义了一个字段confirm_password = forms.CharField(label="确认密码",widget=forms.PasswordInput,)class Meta:model = models.Adminfields = ["username", 'password']widgets = {"password": forms.PasswordInput,}

12.3验证密码

  • 先导入报错的库
python">from django.core.exceptions import ValidationError
  • 编写钩子函数
python">def clean_confirm_password(self):# 获取页面数据(两个密码的)pwd = self.cleaned_data.get("password")confirm = self.cleaned_data.get("confirm_password")if confirm != pwd:raise ValidationError("密码不一致")# 这个是返回到数据库字段的值return confirm
  • 总函数
python">class AdminModelForm(BootStrapModelForm):# 数据库定义两个字段,这里相当于再定义了一个字段confirm_password = forms.CharField(label="确认密码",widget=forms.PasswordInput,)class Meta:model = models.Adminfields = ["username", 'password']widgets = {"password": forms.PasswordInput,}def clean_confirm_password(self):# 获取页面数据(两个密码的)pwd = self.cleaned_data.get("password")confirm = self.cleaned_data.get("confirm_password")if confirm != pwd:raise ValidationError("密码不一致")# 这个是返回到数据库字段的值return confirm

在这里插入图片描述

往期回顾

1.【快速开发网站】
2.【浏览器能识别的标签1】
3.【浏览器能识别的标签2】
4.【浏览器能识别的标签3】
5.【浏览器能识别的标签4】
6.【案例1:用户注册】
7.【案例2:用户注册改进】
8.【快速了解 CSS】
9.【常用选择器概念讲解】
10.【CSS基础样式介绍1】
11.【CSS基础样式介绍2】
12.【CSS基础样式介绍3】
13.【CSS基础样式介绍3】
14.【案例 小米商城头标】
15.【案例 小米商城头标总结】
16.【案例 小米商城二级菜单】
17.【案例 商品推荐部分】
18.【伪类简单了解】
19.【position】
20.【案例 小米商城中app图标代码】
21.【边框及总结】
22.【BootSrap初了解】
23.【BootSrap的目录栏】
24.【BootSrap的栅格系统】
25.【案例 博客案例】
26.【案例 登录】
27.【案例 后台管理样例】
28.【图标】
29.【BootStrap依赖】
30.【javascript初了解】
31.【jJavaScript的变量】
32.【JavaScript的字符串类型】
33.【JavaScript的数组介绍】
34.【案例 动态数据】
35.【javascript 对象(字典)】
36.【案例 动态表格】
37.【Javascript的条件语句和函数】
38.【DOM初了解】
39.【DOM的事件了解】
40.【jQuery初了解】
41.【jQuery寻找标签】
42.【jQuery寻找标签2】
43.【jQuery寻找标签(间接寻找)】
44.【案例 菜单的切换】
45.【案例 只能打开一个菜单】
46.【jQuery 简单操作】
47.【案例 动态创建数据】
48.【案例 点击获取文本】
49.【案例 点击删除文本】
50.【案例 表格操作】
51.【案例 添加页面】
52.【初识MySQL】
53.【MySQL命令介绍一】
54.【MySQL命令介绍二】
55.【MySQL命令介绍三】
56.【案例:员工管理】
57.【案例 Flask+MySQL新增用户】
58.【案例 Flask+MySQL查询所有用户】
59.【初识 django
60.【django的快速上手】
61.【django的模板语法】
62.【django的获取请求与响应】
63.【案例 用户登录】
64.【django数据库操作】
65.【django数据库操作–创建与删除表】
66.【django数据库操作–操作表中的数据】
67.【案例 用户管理】
68.【A 案例: 员工管理系统1】
69.【A 案例: 员工管理系统2】
70.【A 案例: 员工管理系统3】
71.【A 案例: 员工管理系统4】
72.【A 案例: 员工管理系统5】
73.【A 案例: 员工管理系统6】
74.【A 案例: 员工管理系统7】
75.【A 案例: 员工管理系统8】


http://www.ppmy.cn/server/118467.html

相关文章

JS考核答案

1.请简述var, let, const的区别&#xff1f; &#xff08;1&#xff09;块级作用域&#xff1a;块作用域由 { }包括&#xff0c;let和const具有块级作用域&#xff0c;var不存在块级作用域。块级作用域解决了ES5中的两个问题&#xff1a; 内层变量可能覆盖外层变量 用来计数的…

Xcode报错:No exact matches in reference to static method ‘buildExpression‘

Xcode报错1&#xff1a;No exact matches in reference to static method buildExpression Xcode报错2&#xff1a;Type () cannot conform to View 这两个报错都是因为在SwiftUI的View的Body里面使用了ForEach循环,却没有在ForEach循环闭包的内部返回视图&#xff0c;而是做了…

Linux操作系统面试题记录

一、进程与线程 1.并发和并行的区别 并发&#xff1a;一个cpu处理器处理多个任务&#xff1b; 并行&#xff1a;多个cpu处理器处理多个任务&#xff1b; 2.进程和线程是什么&#xff1f;区别&#xff1f;何时用线程何时用进程&#xff1f; Linux中其实没有进程线程之分&…

Mac 创建 Python 虚拟环境

在 macOS 上&#xff0c;您可以使用以下步骤使用 virtualenv 创建虚拟环境&#xff1a; 首先&#xff0c;确保您已经安装了 Python 和 virtualenv。您可以在终端中运行以下命令来检查它们是否已安装&#xff1a; python --version virtualenv --version如果这些命令没有找到&am…

Python XML 解析

什么是 XML&#xff1f; Python 对 XML 的解析 1.SAX (simple API for XML ) 2.DOM(Document Object Model) 3.ElementTree(元素树) python使用SAX解析xml ContentHandler类方法介绍 make_parser方法 parser方法 parseString方法 Python 解析XML实例 使用xml.dom解析…

IO模型---BIO、NIO、IO多路复用、AIO详解

本篇将想给详细解释一下什么是BIO、NIO、IO多路复用以及AIO~ 同步的阻塞(BIO)和非阻塞(NIO)的区别 BIO&#xff1a;线程发来IO请求后&#xff0c;一直阻塞着IO线程&#xff0c;需要缓冲区这边数据准备好之后&#xff0c;才会进行下一步的操作。 举个&#x1f330;&#xff1…

在Word中,用VBA比较两段文本的相似度

效果1: 去掉字符串中回车&#xff0c;进行改进后效果&#xff1a; 代码&#xff1a; Function LevenshteinDistance(s As String, t As String) As IntegerDim d() As IntegerDim i As IntegerDim j As IntegerDim cost As IntegerDim sLen As IntegerDim tLen As IntegersLen…

新手制作视频用什么软件好?五款剪辑工具分享!

在数字时代&#xff0c;视频制作已成为许多人表达创意、记录生活的重要方式。但对于新手而言&#xff0c;面对琳琅满目的视频编辑软件&#xff0c;往往会感到无所适从。今天&#xff0c;我们就来推荐五款适合新手的视频制作软件&#xff0c;它们分别适用于不同的操作系统平台&a…