• 【银角大王——Django课程——创建项目+部门表的基本操作】


    员工管理系统

    创建项目

    命令行的形式创建Django项目——

    (1)打开终端,进入想要项目存放位置的目录

    F:\python笔记20210604\project_Djangomanagesystem
    
    • 1

    (2)进入存放目录后,执行命令创建项目

    //python安装的路径下的Scripts下的django工具  startproject  项目名称
    "F:\python学习\python3.7.2024\Scripts\django-admin.exe" startproject djangoproject_1
    
    • 1
    • 2
    创建app

    执行命令——cd到项目目录下

    python manage.py startapp app01
    
    • 1

    在这里插入图片描述

    注册app——在sttings中的INSTALLED_APPS = [ ]数组中注册

    在INSTALLED_APPS数组里编写app01(创建的app的文件名字).apps.App01Config(apps里面的类)
    在这里插入图片描述

    设计表结构(django)

    ————————————models.py中编写表

    
    class Department(models.Model):
        # 部门表
        title=models.CharField(verbose_name='标题',max_length=32)
    
    
    
    
    class UseInfo(models.Model):
        #员工表
        name=models.CharField(verbose_name='姓名',max_length=16)
        password=models.CharField(verbose_name='密码',max_length=64)
        age=models.IntegerField(verbose_name='年龄')
        account=models.DecimalField(verbose_name='账户余额',max_digits=10,decimal_places=3,default=0)
        from_time=models.DateTimeField(verbose_name='入职时间')
        #添加约束——只能是部门表中已有的部门id
        #无约束
        department_id=models.IntegerField(verbose_name='部门ID',)
        #有约束
        #1.
        #-to,与那张表关联
        #-to_field,表中哪一列关联
        #2.
        #django自动,在生成得列后面加一个关联字段名
        #如depart列,关联id,则生成depart_id
        #3.
        # 部门表被删除
        #3.1 级联删除,设置字段on_delete=models.CASCADE(级联),foreignKey(外键)
        depart=models.ForeignKey(to="Department",to_fields="id",on_delete=models.CASCADE)
        #3.2 置空——设置字段null=True,blank=True,on_delete=models.SET_NULL
        #depart=models.ForeignKey(to="Department",to_fields="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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    连接数据库——在settings里面改写DATABASES

    DATABASES = {
        'default':{
            'ENGINE':'django.db.backends.mysql',
            'NAME':'stff_db',#数据库的名字——员工数据库
            'USER':'root',
            'PASSWORD':'123456',
            'HOST':'localhost', #127.0.0.1
            'PORT':'3306',
    
    
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    Django命令执行生成数据库

    python manage.py makemigrations
    
    • 1
    python manage.py migrate
    
    • 1

    查看数据库创建是否成功
    在这里插入图片描述
    查看数据库中表是否存在
    在这里插入图片描述

    创建static目录和templates目录在app下

    ———————将需要的框架都导入进来,或者直接复制之前项目的static文件粘贴也行
    在这里插入图片描述

    部门的管理(最原始的方式)——之后使用Django框架提供的Form和ModelForm组件

    (1)部门列表页面
    1. 在urls.py中添加函数与地址的关系
    urlpatterns = [
    
    
        # path('admin/', admin.site.urls),
    # 访问网址depart/list/, 就会去执行函数并执行函数,函数在views中
        path('depart/list/',views.depart_list),
        ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    2. 编写函数——在view.py中

    #部门列表展示
    def depart_list(request):
    
        #去数据库中获取部门列表
        #query_list——列表
        query_list=models.Department.objects.all()
        return render(request,'depart_list.html',{'query_list':query_list} )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    1. 在HTML中编写
    
    {% load static %}
    
    DOCTYPE html>
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    
    
    
    
    
    
    
    
    
        <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">
        
        <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 navigationspan>
            <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 class="active"><a href="#">部门管理 <span class="sr-only">(current)span>a>li>
    
              <ul class="dropdown-menu">
                <li><a href="#">Actiona>li>
                <li><a href="#">Another actiona>li>
                <li><a href="#">Something else herea>li>
                <li role="separator" class="divider">li>
                <li><a href="#">Separated linka>li>
                <li role="separator" class="divider">li>
                <li><a href="#">One more separated linka>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>
      <div class="container">
          <div style="margin-bottom: 10px">
    
                <a class="btn btn-success" href="/depart/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-list" aria-hidden="true">span>
            部门列表
          div>
          <div class="panel-body">
            <p>欢迎进入到部门管理页面,请安全操作!p>
          div>
    
          
          <table class="table table-bordered">
            <thead>
              <tr>
                <th>IDth>
                <th>名称th>
                <th>操作th>
              tr>
            thead>
            <tbody>
    
            {% for obj in query_list %}
              <tr>
                <td>{{obj.id}}td>
                <td>{{obj.title}}td>
                <td>
    
                  <a class="btn btn-primary btn-xs"  href="/depart/{{obj.id}}/edit/">编辑a>
    
                  <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{obj.id}}" >删除a>
                td>
              tr>
            {% endfor %}
            tbody>
          table>
        div>
    
    
    
      div>
    
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138

    在这里插入图片描述

    (2)部门添加页面
    1. 在urls.py中编写
    urlpatterns = [
    
    
        # path('admin/', admin.site.urls),
    # 访问网址depart/list/, 就会去执行函数并执行函数,函数在views中
    
        path('depart/add/',views.depart_add),
        ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    #添加部门函数
    def depart_add(request):
            if request.method =="GET":
                  return render(request,'depart_add.html')
    
            #接收通过post请求传过来的数据(先不管非法的输入数据)
            else:
               title= request.POST.get("title")
               #保存到数据库
               models.Department.objects.create(title=title)
               #重定向回列表页面
               #记得导入redirect模块
               return redirect("/depart/list/")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 在HTML中编写
    {% load static %}
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <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">
        
        <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 navigationspan>
            <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 class="active"><a href="#">部门管理 <span class="sr-only">(current)span>a>li>
    
              <ul class="dropdown-menu">
                <li><a href="#">Actiona>li>
                <li><a href="#">Another actiona>li>
                <li><a href="#">Something else herea>li>
                <li role="separator" class="divider">li>
                <li><a href="#">Separated linka>li>
                <li role="separator" class="divider">li>
                <li><a href="#">One more separated linka>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>
        <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 %}
                          <div class="form-group">
                            <label >部门名称label>
                            <input type="text" class="form-control"  placeholder="部门名称" name="title">
                          div>
                          <button type="submit" class="btn btn-primary">提 交button>
                    form>
                div>
            div>
    
    
    
        div>
    
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93

    在这里插入图片描述
    请添加图片描述

    (3)部门删除
    1. 在urls.py中编写
    urlpatterns = [
    
    
        # path('admin/', admin.site.urls),
    # 访问网址depart/list/, 就会去执行函数并执行函数,函数在views中
        path('depart/delete/',views.depart_delete),
        ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请添加图片描述

    1. 在views.py中编写
    #删除部门,通过get请求获取id
    def depart_delete(request):
        #获取
            nid=request.GET.get('nid')
        #删除
            models.Department.objects.filter(id=nid).delete()
        #跳转回部门list
            return redirect("/depart/list/")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 在HTML中编写

    在list列表页面中可以看见——此按钮通过get请求传递参数

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

    请添加图片描述

    (3)部门编辑
    1. 在urls.py中编写
    urlpatterns = [
    
    
        # path('admin/', admin.site.urls),
    # 访问网址depart/list/, 就会去执行函数并执行函数,函数在views中
     
        #正则表达式方式传递参数
        path('depart//edit/',views.depart_edit)
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请添加图片描述

    1. 在views.py中编写
    #修改部门
    def depart_edit(request,nid):
        if request.method =="GET":
                #根据nid,获取数据第一项[obj,]
                #models.Department.objects.filter(id=nid),这样是获取满足条件的记录,我们应该取第一项,而不是有一个对象的list容器
                row_object=models.Department.objects.filter(id=nid).first()
                #通过模板语法传递从数据库拿到的对象,映射到页面中渲染
                return render(request,'depart_edit.html',{"row_object":row_object})
        else:
            # 获取用户提交的信息
            title=request.POST.get("title")
            #根据id找到数据库中的数据进行更新
            models.Department.objects.filter(id=nid).update(title=title)
            # 跳转回部门list
            return redirect("/depart/list/")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 在HTML中编写
    {% load static %}
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <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">
        
        <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 navigationspan>
            <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 class="active"><a href="#">部门管理 <span class="sr-only">(current)span>a>li>
    
              <ul class="dropdown-menu">
                <li><a href="#">Actiona>li>
                <li><a href="#">Another actiona>li>
                <li><a href="#">Something else herea>li>
                <li role="separator" class="divider">li>
                <li><a href="#">Separated linka>li>
                <li role="separator" class="divider">li>
                <li><a href="#">One more separated linka>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>
        <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 %}
                          <div class="form-group">
                            <label >标题label>
                            <input type="text" class="form-control"  placeholder="标题" name="title" value="{{row_object.title}}">
                          div>
                          <button type="submit" class="btn btn-primary">提 交button>
                    form>
                div>
            div>
        div>
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    请添加图片描述

  • 相关阅读:
    字符设备驱动_1:基本概念和数据结构
    Laravel-admin弹出提示层的三种方法
    ubuntu离线安装docker导入镜像
    Elasticsearch是如何实现Master选举的?
    全国双非院校考研信息汇总整理 Part.8
    synchronized锁升级过程
    离散型制造企业MES管理系统解决方案
    利用Excel制作库房管理系统
    项目(模块1:用户登陆流程分析)
    查看cpu 命令,了解机器极限
  • 原文地址:https://blog.csdn.net/weixin_45753504/article/details/138036364