欢迎来到军工软件开发人才培养基地——学到牛牛

添加用户列表模块

时间:2024-05-06 07:01:10 来源:学到牛牛

员工管理系统中有多个菜单模块,之前案例已经将部门管理菜单栏功能实现,现需要实现用户管理菜单栏功能。

1、实现菜单切换

用户管理模块中包含用户列表、添加用户、修改用户和删除用户功能。实现用户管理模块之前,首先需要实现点击菜单切换到不同的菜单模块,具体代码如下图所示。

 

 

上述代码在模板文件中设置“部门管理”和“用户管理”两个菜单按钮,其中点击“部门管理”按钮跳转到部门展示页面,点击“用户管理”按钮跳转到用户展示页面,实现菜单模块切换功能。

 

2、查询所有用户

查询所有用户的操作与查询所有部门的操作一样,使用models.UserInfo.objects.all()函数获取所有用户的对象集,通过遍历对象集从而获取数据对象,然后使用数据对象调用对象字段来获取数据。一些常见类型或者单个表字段可以这样获取,如果获取一些特殊类型(例如:注册时间字段、性别字段)或关联表中的字段,就不能直接调用。

2.1 获取时间类型

直接将时间类型返回给HTML页面,它是以一种默认格式展示,这种展示方式不符合我们对时间认知。所以,为了解决这种情况,一般会将时间转换为指定规则的字符显示。

a.在Python中的的时间转换

在Python转换时间需要导入datetime模块。

from datetime import datetime

 

使用strftime()函数将时间类型转换为字符类型,返回值为字符串类型。第一个参数为时间类型,第二个参数为转换规则,其中%Y(年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)。

datetime.strftime(d, "%Y-%m-%d %H:%M:%S")

 

使用strptime()函数将字符类型转换为时间类型,返回值为时间类型。第一个参数为字符串类型,第二个参数为转换规则。strptime()函数第一个参数的字符串必须与第二个参数的规则格式一致。

str = “2022-10-1 8:35:15”

datetime.strftime(str, "%Y-%m-%d %H:%M:%S")

 

b.在模板中的时间转换

在模板语法中时间转换与Python的语法规范有所不同,模板中需要遵循模板的语法规范,模板具体语法如下。

{{ user.create_time|date:"Y-m-d" }}

其中user.create_time用于获取后台响应的时间类型数据;date:”Y-m-d”用于设置时间转换的规则,它使用以下符号转换对应的时间。

Y(年)、m(月)、d(日)、H(时)、i(分)、s(秒)

 

2.2 获取性别

性别字段是smallint(最小的类型)类型,其内容为数字,这样做有利于节约表空间。如果直接将性别字段中数据返回给页面,它将显示实际存储的值,这个值并不能使我们知道它具体是什么意思,所以Django中提供“get_字段_display()”函数帮助我们获取值对应的中文意思。要想使用“get_字段_display()”函数,需要定义元组的元组类型(选择字段),然后才能使用该函数,具体操作如下。

第一步:在models.py文件设置字段选择字段。

# 性别字段,为了节约空间,可以将性别字段设置为小整型

# 在choices是Django的代码做的约束,这里表示填写性别时只能写1或2,1代表男,2代表女。

gender_choices = (

   (1, "男"),

   (2, "女")

)

gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)

 

第二步:根据值获取选择字段中对应的中文。

在views.py文件中使用Python语法来获取。

# 性别

# Django中提供“get_字段_display()”函数,用于获取选择元组的元组中对应Key的中文内容。

gender = obj.get_gender_display()

print(gender)

 

在HTML文件中,需要使用模板语法来获取。

{# 获取选择元组的元组中对应Key的中文内容,注意:在模板语法中不允许方法后加括号,模板会自动的给方法加上括号 #}

<td>{{ user.get_gender_display }}</td>

 

2.3 获取部门名

获取关联表中的其它字段数据,使用当前外键的变量名即可。Django生成表时会为外键字段自动加id(如:depart字段,生成表时字段为depart_id),其实depart_id只能获取当前表中的字段内容,而depart表示根据id自动的去关联表中获取的那一行的数据对象。所以,想要获取关联表的其它字段时,使depart对象去调用关联表中的其它字段即可(如:depart.title)。

在views.py文件中,获取关联字段对应的表数据。

title = obj.depart.title

print(title)

 

在HTML文件中,获取关联字段对应的表数据。

{# 获取关联表其它字段,通过获取外键ID对应的对象来获取 #}

<td>{{ user.depart.title }}</td>

 

3、查询所有用户源码

3.1 在urls.py文件设置查询用户的URL地址。

# 2、用户管理

path('user/list/', views.user_list),

在菜单模板文件是设置访问查询所有用户的触发链接。

 

 

3.2 创建user_list.html文件

在user_list.html文件中创建用户管理页面,实现用户列表、新建用户、编辑用户和删除用户等功能。

{% extends 'menu_template.html' %}

{% block menu %}

   {# 列出用户信息 #}

   <div class="container">

      {# 按钮 #}

      <div style="margin-bottom: 10px">

         <a href="/depart/add/" class="btn btn-primary">

            <span class="glyphicon glyphicon-plus"></span>

            新建用户

         </a>

      </div>

      {# 面板 #}

      <div class="panel panel-default">

        <!-- Default panel contents -->

        <div class="panel-heading">

           <span class="glyphicon glyphicon-th-large"></span>

           用户列表

        </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 user in user_info %}

              <tr>

               <th scope="row">{{ user.id }}</th>

               <td>{{ user.name }}</td>

               <td>{{ user.password }}</td>

               {# 获取选择元组的元组中对应Key的中文内容,注意:在模板语法中不允许方法后加括号,模板会自动的给方法加上括号 #}

               <td>{{ user.get_gender_display }}</td>

               <td>{{ user.age }}</td>

               <td>{{ user.account }}</td>

               {# 获取时间,并转为自定格式;模板语法中提供一套专用的方法用来转换时间;Y(年)、m(月)、d(日)、H(时)、i(分)、s(秒) #}

               <td>{{ user.create_time|date:"Y-m-d" }}</td>

               {# 获取关联表其它字段,通过获取外键ID对应的对象来获取 #}

               <td>{{ user.depart.title }}</td>

               <td>

                  <a href="/depart/{{ obj.id }}/edit/" class="btn btn-primary btn-xs">编辑</a>

                  <a href="/depart/delete/?did={{ obj.id }}" class="btn btn-danger btn-xs">删除</a>

               </td>

              </tr>

            {% endfor %}

 

         </tbody>

        </table>

      </div>

   </div>

{% endblock %}

 

3.3 创建列出所有用户函数

在views.py文件中获取用户相关信息,然后将获取的用户数据集返回给user_list.html页面。

# 列出所有用户

def user_list(request):

   # 获取数据库中用户数据

   user = models.UserInfo.objects.all()

   for obj in user:

      print(obj.id, obj.name, obj.password, obj.age, obj.account)

      # 时间

      from datetime import datetime

      text = obj.create_time

      # %Y(年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)

      t = datetime.strftime(text, "%Y-%m-%d %H:%M:%S")

      print(t)

      # 性别

      # Django中提供“get_字段_display()”函数,用于获取选择元组的元组中对应Key的中文内容。

      gender = obj.get_gender_display()

      print(gender)

      # 部门名

      # 获取关联表中的其它数据

      # Django生成表是会为外键字段自动加id(如:depart字段,生成表时字段为depart_id)

      # 其实depart_id只能获取当前表中的字段内容,而depart表示根据id自动的去关联表中获取的那一行的数据对象。

      # 所以,想要获取关联表的其它字段时,使depart对象去调用关联表中的其它字段即可(如:depart.title)。

      title = obj.depart.title

      print(title)

   # 将获取到的数据返回给user_list.html页面

   return render(request, "user_list.html", {"user_info": user})