【银角大王——Django课程——用户表的基本操作】

Django课程——用户表的基本操作

    • 模板的继承
    • 用户管理
      • 用户列表展示
      • 新建用户
        • Django组件
          • 原始方法【麻烦,太原始】
          • form组件
          • modelform组件
        • 使用modelsform组件编写添加页面

模板的继承

(1)先写一个页面模板————这个案例中的模板基本上就是一个导航栏,然后就是链接的框架导入——占位符可以用在任何需要的地方
代码:


{% load static %}<!DOCTYPE html><html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
<!--    为啥只能使用这种引用,好无语,配置文件中应该咋改嘞-->
<!--    <link rel="stylesheet" type="text/css" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">-->
<!--    <link rel="stylesheet" type="text/css" href="../static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">-->
<!--    去除圆角样式-->
<!--    <style>-->
<!--        .navbar{ -->
<!--        border-radius:0;-->
<!--        }-->
<!--    </style>--><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css'%}">
</head>
<body>
<nav class="navbar navbar-default"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">联通用户管理系统</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/depart/list/">部门管理 </a></li><li><a href="/user/list/">用户管理 </a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><ul class="nav navbar-nav navbar-right"><li><a href="#">登录</a></li><li class="dropdown " ><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">庞恬 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">个人资料</a></li><li><a href="#">我的信息</a></li><li role="separator" class="divider"></li><li><a href="#">注销</a></li></ul></li></ul></div></div>
</nav><div>{% block content %}{% endblock %}</div><!--这个不知道会不会有效哦--><script src="{% static 'js/jquery-3.5.1/jquery-3.5.1.min.js' %}"></script><script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script></body>
</html>

在这里插入图片描述

(2)继承模板,并完整添加占位符的内容

代码:


{% load static %}<!DOCTYPE html><html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
<!--    为啥只能使用这种引用,好无语,配置文件中应该咋改嘞-->
<!--    <link rel="stylesheet" type="text/css" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">-->
<!--    <link rel="stylesheet" type="text/css" href="../static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">-->
<!--    去除圆角样式-->
<!--    <style>-->
<!--        .navbar{ -->
<!--        border-radius:0;-->
<!--        }-->
<!--    </style>--><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css'%}">
</head>
<body>
<nav class="navbar navbar-default"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">联通用户管理系统</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li><a href="/depart/list/">部门管理 </a></li><li><a href="/user/list/">用户管理 </a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><ul class="nav navbar-nav navbar-right"><li><a href="#">登录</a></li><li class="dropdown " ><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">庞恬 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">个人资料</a></li><li><a href="#">我的信息</a></li><li role="separator" class="divider"></li><li><a href="#">注销</a></li></ul></li></ul></div></div>
</nav><div>{% block content %}{% endblock %}</div><!--这个不知道会不会有效哦--><script src="{% static 'js/jquery-3.5.1/jquery-3.5.1.min.js' %}"></script><script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script></body>
</html>

在这里插入图片描述

用户管理

用户列表展示

(1)在urls中编写
在这里插入图片描述
代码:

urlpatterns = [#用户管理path('user/list/', views.user_list),]

(2)在views.py中编写函数
在这里插入图片描述

#用户管理
#用户列表显示
def user_list(request):#获取所有用户列表query_set=models.UseInfo.objects.all();#循环遍历#for obj in query_set:#strftime("%Y-%m-%d")取时间显示函数#get_列名_display()————————找这种性别类型,已经用元组定义了的,choices#所属部门——外键连接,显示方法#obj.depart_id 数据库中原始的数据#关联系跨表——取外键对应值——对象#obj.depart.title#原始方法拿##xx=models.Department.objects.filter(id=obj.depart_id).first()#xx.title# print(obj.id,obj.name,obj.account,obj.from_time.strftime("%Y-%m-%d"),obj.get_gender_display(),obj.depart.title)return render(request,'user_list.html',{"query_set":query_set})

(3)继承了模板的用户列表

{% extends 'layout.html' %}{% block content %}<div class="container"><div style="margin-bottom: 10px">
<!--        新建部门按钮--><a class="btn btn-success" href="#" ><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>新建用户</a></div><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading"><span class="glyphicon glyphicon-list" aria-hidden="true"></span>用户列表</div><div class="panel-body"><p>欢迎进入到用户管理页面,请安全操作!</p></div><!-- Table --><table class="table table-bordered"><thead><tr><th>ID</th><th>姓名</th><th>密码</th><th>年龄</th><th>账户余额</th><th>入职时间</th><th>所属部门</th><th>性别</th><th>操作</th></tr></thead><tbody>
<!--        数据库部门列表循环-->{% for obj in query_set %}<tr><td>{{obj.id}}</td><td>{{obj.name}}</td><td>{{obj.password}}</td><td>{{obj.age}}</td><td>{{obj.account}}</td><td>{{obj.from_time|date:"Y-m-d"}}</td><td>{{obj.depart.title}}</td><td>{{obj.get_gender_display}}</td><td>
<!--                Django框架中传递参数的正则表达式--><a class="btn btn-primary btn-xs"  href="#">编辑</a>
<!--                通过get请求传递参数跳转页面--><a class="btn btn-danger btn-xs" href="#" >删除</a></td></tr>{% endfor %}</tbody></table></div></div>{% endblock%}

(4)入职时间,性别,部门外键的用法,看代码的时候要发现——在函数中和在页面渲染中的方法不一样。

  1. 入职时间:
obj.from_time.strftime("%Y-%m-%d")
<td>{{obj.from_time|date:"Y-m-d"}}</td>
  1. 性别:
    在表结构中的定义
    在这里插入图片描述
obj.get_gender_display()
<td>{{obj.get_gender_display}}</td>
  1. 部门属性——它是一个外键:在框架中生成的表名称将自动加一个id,表示这是与其他表连接的
    在这里插入图片描述
depart=models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE)
<td>{{obj.depart.title}}</td>

效果图:
在这里插入图片描述

新建用户

Django组件
原始方法【麻烦,太原始】
form组件

用法:(此代码只是用来展示用法——不可直接复制)
在views中定义一个类:该类封装所有的属性——实例化后来使用

#views.py文件
class MyForm(Form):user=forms.CharField(widget=formsInput)pwd=forms.CharField(widget=formsInput)email=forms.CharField(widget=formsInput)....def user_add(request):if request.method=="GET":#直接实例化,然后再HTML中去使用form=MyForm()return render(request,'user_add.html',{'form':form})
<!--html文件-->
<form method='post'>
<!--不用在像以前一样,写input框,直接封装为特定的框-->
<!--{{form.user}}-->
<!--{{form.pwd}}-->
<!--也可以直接循环form来简洁代码-->
{% for field in form %}{{field}}
{% endfor %}
</form>
modelform组件

用法:它是基于models.py文件来的
也就是基于表
在这里插入图片描述

#views.py文件
class MyForm(ModelForm):#可在自定义xx=form.CharField...("...")class Meta:model=UserInfofields=["name","password","age","xx".....]
def user_add(request):if request.method=="GET":#直接实例化,然后再HTML中去使用form=MyForm()return render(request,'user_add.html',{'form':form})
<!--html文件-->
<form method='post'>
<!--不用在像以前一样,写input框,直接封装为特定的框-->
<!--{{form.user}}-->
<!--{{form.pwd}}-->
<!--也可以直接循环form来简洁代码-->
{% for field in form %}{{field}}
{% endfor %}
</form>
使用modelsform组件编写添加页面

原始方法的缺点:

  1. 用户提交数据没有校验
  2. 页面上没有响应的提示错误
  3. 页面上的字段需要我们都写一遍,太重复
  4. 关联的数据,手动去获取并要循环展示在页面上

(1)在urls.py中编写
在这里插入图片描述
代码如下:

urlpatterns = [path('user/model/form/add/',views.user_model_form_add),
]

(2)在view.py编写
在这里插入图片描述
代码如下:

#############################################modelForm实例####################################################
#modelForm实例
from django import formsclass UserModelForm(forms.ModelForm):class Meta:model = models.UseInfofields = ["name","password","age","account","from_time","depart","gender"]# widgets={#     "name":forms.TextInput(attrs={"class":"form-control"}),#     "password": forms.PasswordInput(attrs={"class": "form-control"}),### }def __init__(self,*args,**kwargs):super().__init__(*args ,**kwargs)#循环找到所有插件,添加了class=“form-control”样式for name ,field in self.fields.items():# print(name,field)#某一项去除样式# if name=="password":#     continuefield.widget.attrs = {"class":"form-control","placeholder":field.label}

(3)在HTML中编写
在这里插入图片描述
代码如下:

{% extends 'layout.html' %}{% block content %}<div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"> 新建用户 </h3></div><div class="panel-body"><form method="post">
<!--                    隐含参数-->{% csrf_token %}{% for field in form %}<div class="form-group"><label >{{ field.label }}</label>{{ field }}<!--                        <input type="text" class="form-control"  placeholder="标题" name="user">--></div>{% endfor %}<button type="submit" class="btn btn-primary">提 交</button></form></div></div></div>{% endblock %}<!-- <form method="post">-->
<!--   {% csrf_token %}-->
<!--&lt;!&ndash;     label通过表中中文命名连接(verbose_name='姓名')&ndash;&gt;-->
<!--     {% for field in form %}--><!--            {{ field.label}}:{{field}}--><!--     {% endfor %}--><!--&lt;!&ndash;   {{form.name.label}}:{{form.name}}&ndash;&gt;-->
<!--&lt;!&ndash;   {{form.password.label}}:{{form.password}}&ndash;&gt;-->
<!--&lt;!&ndash;   {{form.age.label}}:{{form.age}}&ndash;&gt;--><!-- </form>-->

(4)widgets.py源码
在这里插入图片描述
(5)数据校验
【单独补!!!!!!!】

(6)最终页面
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318456.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写&#xff0c;所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说&#xff0c;将同一业务的数据先分片&#xff0c;再以多份副本的形…

嫦娥六号发射任务圆满成功,开启月球背面采样返回之旅 | 最新快讯

央视新闻5月3日消息&#xff0c;据国家航天局&#xff0c;5月3日17时27分&#xff0c;嫦娥六号探测器由长征五号遥八运载火箭在中国文昌航天发射场成功发射&#xff0c;准确进入地月转移轨道&#xff0c;发射任务取得圆满成功。嫦娥六号探测器开启世界首次月球背面采样返回之旅…

光固化打印--问题记录

平面翘起 原因&#xff1a;角度平&#xff0c;缺支持 解决&#xff1a; 45度角度摆放底部平面起皮 原因&#xff1a;缺少支撑&#xff0c;原始结构支持无法支撑平面。 解决&#xff1a;增加支撑

2024 会声会影转场区间如何设置 会声会影电影片头怎么做

视频转场是视频剪辑中重要的技巧之一&#xff0c;合理运用转场效果可以提升视频的质量和观赏性。这篇文章就一起来学习一 下会声会影转场区间默认几秒&#xff0c;会声会影转场区间如何设置。 一、会声会影转场区间默认几秒 会声会影转场区间默认1秒。1秒的转场区间可以使场景…

nuxt3项目服务端bulid后在本地浏览的3种方式(nuxi preview、Node.js Server、PM2)

你也许会问有了开发调试本地浏览&#xff0c;为什么还要服务端构建之后在本地浏览&#xff1f; 举个简单例子 在 Nuxt 3 服务端打包中&#xff0c;由于运行环境不同&#xff0c;无法直接访问 process 对象。服务端打包通常是在 Node.js 环境中进行的&#xff0c;而 process 对象…

【云原生】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲&#xff1a;docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

微信小程序+esp8266温湿度读取

本文主要使用微信小程序显示ESP8266读取的温湿度并通过微信小程序控制LED灯。小程序界面如下图所示 原理讲解 esp8266 通过mqtt发布消息,微信小程序通过mqtt 订阅消息,小程序订阅后,就可以实时收到esp8266 传输来的消息。 个人可免费注册五个微信小程序账号,在微信小程序官…

基于java,SpringBoot和VUE的求职招聘简历管理系统设计

摘要 基于Java, Spring Boot和Vue的求职招聘管理系统是一个为了简化求职者与雇主间互动流程而设计的现代化在线平台。该系统后端采用Spring Boot框架&#xff0c;以便快速搭建具有自动配置、安全性和事务管理等特性的RESTful API服务&#xff0c;而前端则使用Vue.js框架构建动…

2024最新docker部署gitlab

docker部署gitlab 快速命令 1 拉取镜像 docker pull gitlab/gitlab-ce2 启动容器 docker run -itd \-p 9980:80 \-p 9922:22 \-v /opt/soft/docker/gitlab/etc:/etc/gitlab \-v /opt/soft/docker/gitlab/log:/var/log/gitlab \-v /opt/soft/docker/gitlab/opt:/var/opt/g…

【C语言实现贪吃蛇】(内含源码)

前言&#xff1a;首先在实现贪吃蛇小游戏之前&#xff0c;我们要先了解Win32 API的有关知识 1.Win32 API Windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调佣这个中心的各种服务&#xff08;每一…

设置cordova编译时采用本地已下载的gralde

设置cordova编译时采用本地已下载的gralde 前言 编译Cordova时&#xff0c;往往会根据cordova工程的需要从网络上下载不同版本的gradle用于编译&#xff0c;每次下载带来编译速度慢&#xff0c;甚至因为网络不稳定&#xff0c;导致提示因无法下载gradle而编译失败&#xff01;…

【如何使用SSH密钥验证提升服务器安全性及操作效率】(优雅的连接到自己的linux服务器)

文章目录 一、理论基础&#xff08;不喜欢这部分的可直接看具体操作&#xff09;1.为什么要看本文&#xff08;为了zhuangbility&#xff09;2.为什么要用密钥验证&#xff08;更安全不易被攻破&#xff09;3.密码验证与密钥验证的区别 二、具体操作1.生成密钥对1.1抉择&#x…

挑战一周完成Vue3项目Day4: 用户管理+角色管理+菜单管理+首页+暗黑模式/主题切换

一、用户管理 1.静态搭建 src/views/acl/user/index.vue <template><el-card style"height:80px;"><el-form :inline"true" class"form"><el-form-item label"用户名&#xff1a;"><el-input placehold…

LT2611UX四端口 LVDS转 HDMI2.0,带音频

描述LT2611UX 是一款面向机顶盒、DVD 应用的高性能 LVDS 至 HDMI2.0 转换器。LVDS输入可配置为单端口、双端口或四端口&#xff0c;具有1个高速时钟通道和3~4个高速数据通道&#xff0c;工作速率最高为1.2Gbps/通道&#xff0c;可支持高达19.2Gbps的总带宽。LT2611UX 支持灵活的…

设计模式之MVC模式

在编程江湖闯荡多年&#xff0c;我手中打磨过的设计模式多如繁星&#xff0c;但论及经典与实用&#xff0c; MVC&#xff08;Model-View-Controller&#xff09;模式 绝对是个中翘楚&#xff01;它不仅是Web应用的骨架&#xff0c;更是软件架构的智慧结晶。今天&#xff0c;咱们…

tomcat篇-windows 运行tomcat的startup.bat时,终端打印的中文显示为乱码

当运行Tomcat的startup.bat时&#xff0c;如果终端中中文显示为乱码&#xff0c;这通常是因为Tomcat使用的日志输出编码与Windows命令行默认的编码不匹配。针对这一问题&#xff0c;你可以尝试以下步骤来解决&#xff1a; 1、执行startup.bat&#xff0c;在输出的窗口右击&…

从Paint 3D入门glTF

Paint 3D Microsoft Paint 3D是微软的一款图像编辑软件&#xff0c;它是传统的Microsoft Paint程序的升级版。 这个新版本的Paint专注于三维设计和创作&#xff0c;使用户可以使用简单的工具创建和编辑三维模型。 Microsoft Paint 3D具有直观的界面和易于使用的工具&#xff0…

笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序&#xff0c;需要用到python中的以下内置模块 subprocess 是 Python 的一个标准库模块&#xff0c;用于在新进程中执行子命令&#xff0c;获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块&#xff0c;它提供了与操作系统交互的功…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

ubuntu与redhat的不同之处

华子目录 什么是ubuntu概述 ubuntu版本简介桌面版服务器版 安装部署部署后的设置设置root密码关闭防火墙启用允许root进行ssh登录更改apt源安装所需软件 网络配置Netplan概述配置详解配置文件DHCP静态IP设置设置 软件安装方法apt安装软件作用常用命令配置apt源 deb软件包安装概…