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

news2024/11/25 12:50:34

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=UserInfo
		fields=["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 forms

class UserModelForm(forms.ModelForm):
    class Meta:
        model = models.UseInfo
        fields = ["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":
            #     continue
            field.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.coloradmin.cn/o/1633786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

ABAP 数据写入Excel 并保存

参考老白 https://www.cnblogs.com/liaojunbo/archive/2011/09/06/2168552.html 但是缺zcl_excel 。需要从 dotabap要引入abap2xlsx 英文版进入后 尝试了一下 1&#xff09;列的宽度自适应么有找到在哪里&#xff1f; 列宽设置 lo_worksheet->set_column_width( ip_co…

Linux第十五章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

22 - Hadoop HA 高可用集群搭建、手动模式、自动模式以及HA模式集群

目录 1、HA 概述 2、HDFS-HA 集群搭建 2.1、HDFS-HA 核心问题 3、HDFS-HA 手动模式 3.1、环境准备 3.2、规划集群 3.3、配置 HDFS-HA 集群 3.4、启动 HDFS-HA 集群 4、HDFS-HA 自动模式 4.1、HDFS-HA 自动故障转移工作机制 4.2、HDFS-HA 自动故障转移的集群规划 4.…

Three.js 的优势

Three.js 是一个非常流行的基于 WebGL 的 JavaScript 库&#xff0c;用于在浏览器中创建和展示 3D 内容。以下是 Three.js 的一些主要优势&#xff0c;这些优势使得 Three.js 成为创建和展示 3D 内容的强大工具&#xff0c;无论是对于初学者还是经验丰富的开发者。北京木奇移动…

OFDM802.11a的FPGA实现(七)一级交织:分组交织器(含verilog和matlab代码)

1.前言 在前面的文章中讲解了卷积编码和删余&#xff0c;实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后&#xff0c;下一个部分就是交织。今天对交织进行具体实现。 交织是为了在时域或频域或者同时在时域、频域上分布传输的信息比特,使信道的突发错误在时间上得以扩散…

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09; 目录 LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.LSTM-KDE的长短期…

CVE-2022-2602:unix_gc 错误释放 io_uring 注册的文件从而导致的 file UAF

前言 复现该漏洞只是为了学习相关知识&#xff0c;在这里仅仅做简单记录下 exp&#xff0c;关于漏洞的详细内容请参考其他文章&#xff0c;最后在 v5.18.19 内核版本上复现成功&#xff0c;v6.0.2 复现失败 漏洞利用 diff --git a/include/linux/skbuff.h b/include/linux/s…

网络安全之密码学技术

文章目录 网络信息安全的概念数据加密|解密概念密码学概论密码学分类古典密码学现代密码学 现代密码学的相关概念对称加密算法对称加密算法—DES对称加密算法—3DES对称加密算法—AES对称加密算法—IDEA 非对称加密算法非对称加密算法—RSA非对称加密算法—ElGamal非对称加密算…

高扬程水泵,提升水源新选择!— 恒峰智慧科技

在炎炎夏日&#xff0c;阳光炙烤着大地&#xff0c;森林火灾的发生频率也随之上升。火势猛烈&#xff0c;烟雾弥漫&#xff0c;给森林带来了极大的破坏。为了保护森林资源&#xff0c;我们必须采取有效的措施来扑灭火灾。而在这其中&#xff0c;高扬程水泵成为了提升水源新选择…

buuctf——web题目练习

1.极客大挑战2019 easysql 密码或者用户输入万能密码即可 关于万能密码的理解和原理&#xff0c;可以参考这篇BUUCTF[极客大挑战 2019] EasySQL 1_[极客大挑战 2019]easysql 1-CSDN博客 2.极客大挑战2019 have fun 题目源码 需要构造payload 网页传参可参考&#xff1a;…

Vue Cli脚手架—安装Nodejs和Vue Cli

一&#xff0c;Vue Cli 文档地址: https://cli.vuejs.org/zh/ 二&#xff0c;.环境配置&#xff0c;搭建项目 1.安装node.js 2.下载 node.js10.16.3 地址: https://nodejs.org/en/blog/release/v10.16.3/ 3.安装 node.js10.16.3 , 直接下一步即可, 安装到 d:\program\nodejs…

ubuntu sudo apt-get install neo4j 配置安装与设置远程访问

文章目录 下载Adding the Debian repositoryInstalling Neo4j安装流程设置远程访问 下载 neo4j 官方的下载地址&#xff0c;进入页面之后&#xff0c;往下滑&#xff1a; https://neo4j.com/deployment-center/#community 点击 Visit https://debian.neo4j.com/ Adding the …

Windows Server Backup设置定时备份保留N天

Windows Server - 运维篇 第四章 Windows Server Backup设置定时备份保留N天 Windows Server - 运维篇系列文章回顾Windows Server Backup设置定时备份保留N天使用VSS卷影复制服务工具删除指定天数的VSS备份文件CMD&#xff1a;wbadmin.exeCMD&#xff1a;wbadmin.mscPowerShel…

【RSGIS数据资源】2018-2020年中国农业大学石羊河实验站主要农作物的无人机观测数据

文章目录 摘要数据介绍2018年蒸腾(T)数据集2020年蒸散发&#xff08;ET)数据集2020年LAI数据集2019年NDVI数据集作物2020年NDVI数据集作物三温模型的输入参数气象数据净辐射通量数据 参考文献引用 摘要 本数据集涵盖了甘肃武威绿洲农业高效用水国家野外科学观测研究站&#xf…

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型&#xff08;LLM&#xff09;虽然在生成文本方面表现出色&#xff0c;但仍然存在一些局限性&#xff1a;数据是静态的&#xff0c;而且缺乏垂直细分领域的知识。为了克服这些限制&#xff0c;有时候会进行进一步的模型训练和微调。在实际应用中&#xff0c;我…

教育机构必备利器:全面解析教培管理系统的关键功能

一个优秀的教培管理系统是培训机构实现高效运营和学员满意度的关键所在。那么&#xff0c;这样的系统应该具备哪些功能呢&#xff1f;今天&#xff0c;我们就来了解一下乔拓云平台开发的教育系统&#xff0c;看看它如何满足这些需求。 乔拓云教育系统的后端功能丰富多样&#x…

百度文库公测智能漫画和智能话本,有兴趣的可以申请一下

百度文库上线智能文库和智能话本功能&#xff0c;目前处于公测中&#xff0c;我刚申请&#xff0c;还在审核中。 智能漫画&#xff0c;参照官网的示例截图&#xff0c;生成的图片看起来不错&#xff0c;没试用过所以不太清楚他的操作模式是什么 智能话本&#xff0c;生成的话…

网站建设企业网站优化

近年来&#xff0c;随着互联网的迅速发展&#xff0c;企业网站已经成为了企业展示自我形象与实力的重要载体之一。然而&#xff0c;单单拥有一个美观、简洁的企业网站并不能让企业在竞争激烈的市场中脱颖而出。因此&#xff0c;在建设企业网站的过程中&#xff0c;我们需要将企…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt&#xff0c;也学习了如何用/etc/rc.local启动控制台程序&#xff0c;那今天我们继续学习一下如何利用树莓…