案例:员工管理系统2(员工 :增)

一. 在models.py中创建员工表

class UserInfo(models.Model):
    """ 员工表 """
    name = models.CharField(verbose_name="姓名", max_length=16)  # 属性 = 字符串类(表头名,型最大长度16)
    password = models.CharField(verbose_name="密码", max_length=64)
    age = models.IntegerField(verbose_name="年龄")  # 属性 = int类型(表头名)
    account = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2,
                                  default=0)  # 属性 = 小数类(表头名,型最大长度10,小数点保留2位,默认为0)
    create_time = models.DateTimeField(verbose_name="入职时间")  # 属性 = 时间类型(表头名)

    # 无约束(id号可以超出与关联表的id号)
    # depart_id = models.BigIntegerField(verbose_name="部门ID")  # 还要有员工对应的部门这一列

    # 1.有约束(id号可以只能与在关联表的id号内)
    #   - to,与那张表关联
    #   - to_field,表中的那一列关联

    # 2.django自动
    #   - 写的depart
    #   - 生成数据列 depart_id

    # 3.部门表被删除
    # ### 3.1 级联删除  属性=(部门列自动关联另一张表的id列,级联删除)
    # depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", on_delete=models.CASCADE)

    # ### 3.2 置空
    depart = models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)

    # 在django中做的约束
    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices) # 属性 = 字符串类(表头名,约束只能选1或2)

二. 在urls.py写url和函数对应关系

urlpatterns = [
    # path('admin/', admin.site.urls),
    # 部门系列
    path('depart/list/', views.depart_list),
    path('depart/add/', views.depart_add),
    path('depart/delete/', views.depart_delete),
    path('depart/<int:nid>/edit/', views.depart_edit),

    # 用户系列
    path('user/list/', views.user_list),
    path('user/add/', views.user_add),

]

三. 在views.py写函数

def user_list(request):
    """ 用户管理 """

    # # 获取所有用户列表 [obj,obj,obj]  不加分页
    queryset = models.UserInfo.objects.all()
    """
    # 用Python的语法获取数据(create_time.strftime("%Y-%m-%d")  把时间转为字符串)(obj.get_gender_display() 直接把元组里数字对应的中文拿到)
    for obj in queryset:
        print(obj.id, obj.name, obj.account, obj.create_time.strftime("%Y-%m-%d"), obj.gender, obj.get_gender_display(), obj.depart_id, obj.depart.title)
        # print(obj.name, obj.depart_id)
        # obj.depart_id  # 获取数据库中部门表存储的那个字段值(1,2,3,4)
        # obj.depart.title  # 根据id自动去关联的表中获取哪一行数据depart对象(广告部,宣传部)。
    """
    # return render(request, 'user_list.html')
    return render(request, 'user_list.html', {"queryset": queryset})

    queryset = models.UserInfo.objects.all()  # 获取所有用户列表 [obj,obj,obj]


def user_add(request):
    """ 添加用户(原始方式) """

    if request.method == "GET":
        context = {  # 把下拉框列表的值定义成一个字典
            'gender_choices': models.UserInfo.gender_choices,  # 获取性别
            "depart_list": models.Department.objects.all()  # 获取部门
        }
        return render(request, 'user_add.html', context)  # 获取的数据映射到页面

    # 获取用户提交的数据
    user = request.POST.get('user')  # 获取用户提交的姓名
    pwd = request.POST.get('pwd')
    age = request.POST.get('age')
    account = request.POST.get('ac')
    ctime = request.POST.get('ctime')
    gender = request.POST.get('gd')
    depart_id = request.POST.get('dp')

    # 添加到数据库中
    models.UserInfo.objects.create(name=user, password=pwd, age=age,
                                   account=account, create_time=ctime,
                                   gender=gender, depart_id=depart_id)

    # 返回到用户列表页面
    return redirect("/user/list/")

四. 在templates里编写HTML文件

        1. 模板文件layout.html

{% load static %}  <!-- django引用语法  -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">  <!-- 引用css  -->
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
    {% block css %}{% endblock %}
</head>
<body>
<nav class="navbar navbar-default">
    <div class="container">
        <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>
        <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>
                <li><a href="/pretty/list/">靓号管理</a></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.6.0.min.js' %}"></script>  <!-- 引用jquery  -->
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>  <!-- 引用 js -->
{% block js %}{% endblock %}  <!-- 导入时间插件  -->
</body>
</html>

        2. 用户列表

{% extends 'layout.html' %}  <!-- 继承layout页面 -->
{% block content %}  <!-- 导入django模板语法 -->
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/user/add/">
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建用户
            </a>

        </div>
        <div class="panel panel-default">
            <!-- 默认面板内容 -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                用户列表
            </div>

            <!-- 表头 -->
            <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 queryset %}  <!-- 模板语法 循环取值 -->
                    <tr>
                        <th>{{ obj.id }}</th>
                        <td>{{ obj.name }}</td>
                        <td>{{ obj.password }}</td>
                        <td>{{ obj.age }}</td>
                        <td>{{ obj.account }}</td>
                        <td>{{ obj.create_time|date:"Y-m-d" }}</td>  <!-- 模板语法不能加(),把时间转为字符串 -->
                        <td>{{ obj.get_gender_display }}</td>  <!-- 直接把元组里数字对应的中文拿到 -->
                        <td>{{ obj.depart.title }}</td>  <!-- 自动去关联的表中获取哪一行数据depart对象(广告部,宣传部) -->
                        <td>
                            <a class="btn btn-primary btn-xs" href="/user/{{ obj.id }}/edit">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/user/{{ obj.id }}/delete">删除</a>
                        </td>
                    </tr>
                {% endfor %}  <!-- 模板语法 循环结束 -->
                </tbody>
            </table>
        </div>
    </div>
{% endblock %}  <!-- 模板语法结束 -->

        3.添加 用户

{% extends 'layout.html' %}  <!--继承html模板 -->
{% block content %}  <!-- 导入django模板语 -->
    <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">  <!--提交表单(提交要有name属性:name="user)-->
                    {% csrf_token %}  <!--模板语法测试表单 -->
                    <div class="form-group">
                        <label>姓名</label>  <!-- 标题 -->
                        <input type="text" class="form-control" placeholder="姓名" name="user"/>
                    </div>
                    <div class="form-group">
                        <label>密码</label>
                        <input type="text" class="form-control" placeholder="密码" name="pwd"/>
                    </div>
                    <div class="form-group">
                        <label>年龄</label>
                        <input type="text" class="form-control" placeholder="年龄" name="age"/>
                    </div>
                    <div class="form-group">
                        <label>余额</label>
                        <input type="text" class="form-control" placeholder="余额" name="ac"/>
                    </div>
                    <div class="form-group">
                        <label>入职时间</label>
                        <input id="dt" type="text" class="form-control" placeholder="入职时间" name="ctime"/>
                    </div>
                    <div class="form-group">
                        <label>性别</label>  <!-- 标题 -->
                        <select class="form-control" name="gd">  <!-- 下拉框 -->
                            {% for item in gender_choices %}  <!-- 模板语法循环取出字典的值 -->
                                <option value="{{ item.0 }}">{{ item.1 }}</option>  <!-- item.0=男 -->
                            {% endfor %}  <!-- 模板语法结束 -->
                        </select>
                    </div>
                    <div class="form-group">
                        <label>部门</label>  <!-- 标题 -->
                        <select class="form-control" name="dp">  <!-- 下拉框 -->
                            {% for item in depart_list %}  <!--模板语法循环取出字典的值 -->
                                <option value="{{ item.id }}">{{ item.title }}</option>  <!--  id=部门 -->
                            {% endfor %}  <!-- 模板语法结束 -->
                        </select>
                    </div>
                    <button type="submit" class="btn btn-primary">提 交</button>
                </form>
            </div>
        </div>
    </div>
{% endblock %}

五. 效果图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值