当前位置: 首页 > news >正文

上海城市建设网站专业软件开发培训机构

上海城市建设网站,专业软件开发培训机构,杭州公司摇号需要哪些资格条件,建设网站前的市场分析怎么写目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1将公共的部分写进模版 2后续新的html页面使用下面方法继承模版 2、将depart_list.html页面使用模版重构 3、将depart_add.html页面重构 4、将depart_edit.html页面重构 八、页面实战-用户管理 1、uri注册 2、views.py 3、用户列表页面 4、添加用户user_add.html--- 老方法 5、添加用户user_model_form_add.html--- 新方法ModelForm 6、解决提示英文问题 7、编辑用户 -新增user_edit.html页面 8、编辑用户 -修改views.py 9、修改数据库入职时间为年月日格式 10、删除用户在views.py新增user_delete方法 一、创建django项目 使用pycharm创建django项目 二、修改默认配置 1、删除settings配置 删除下图[]内容 2、删除templates文件夹 三、创建app应用与注册应用 1、创建app # XXX项目名 python manage.py startapp xxx 2、注册app 修改settings如下图红色方框是创建的app名 三、配置数据库连接 1、安装pymysql pip install pymysql2、配置在项目同名包下的_init_.py里面添加 import pymysql pymysql.install_as_MySQLdb() 3、修改settings.py ,注释db.sqlite3的配置新增下图 # DATABASES { # default: { # ENGINE: django.db.backends.sqlite3, # NAME: BASE_DIR / db.sqlite3, # } # }DATABASES {default: {ENGINE: django.db.backends.mysql, # 数据库的类型NAME: texx, # 所使用的的数据库的名字USER: root, # 数据库服务器的用户PASSWORD: xxxx, # 密码HOST: 127.0.0.1, # 主机PORT: 3306, # 端口} } 四、创建表结构 1、在models.py创建类 from django.db import models# Create your models here.class Department(models.Model):部门表name models.CharField(verbose_name部门名称, max_length20)class UserInfo(models.Model):员工表name models.CharField(verbose_name姓名, max_length20)password models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄)gender_choices ((1, 男), (2, 女))gender models.SmallIntegerField(verbose_name性别,choicesgender_choices)account models.DecimalField(verbose_name账户余额, max_digits10, decimal_places2,default0)create_time models.DateTimeField(verbose_name入职时间)# depart会自动生成字段为depart_id# 级联删除 on_deletemodels.CASCADE# 置空 on_deletemodels.SET_NULL 但是必须和nullTrue, blankTrue配合使用因为你得支持为nulldepart models.ForeignKey(toDepartment, to_fieldid, on_deletemodels.CASCADE)2、创建一个mysql数据库略 3、django命令生成库表 python manage.py makemigrations python manage.py migrate 另一个方法按下图操作之后就可省略上图 python manage.py 命令直接输入后面的即可 五、在app当中创建静态文件 1、创建下图目录 2、将下载的bootstrap-3.4.1复制到plugins 3、将下载的jquery-3.6.3.min.js复制到js 4、在app应用下创建templates文件夹 六、页面实战-部门管理 1、实现一个部门列表页面 1设置部门列表路由 from django.contrib import admin from django.urls import path from TestManagementSystem import viewsurlpatterns [# path(admin/, admin.site.urls),path(depart/list/, views.depart_list), ]2创建部门列表views.py视图 from django.shortcuts import render from TestManagementSystem import models # Create your views here.def depart_list(request):部门列表# 查询所有部门depart_set models.Department.objects.all()print(depart_set)return render(request, depart_list.html, {depart_set: depart_set})3创建部门列表html页面 在templates下创建depart_list.html 先引入样式、js等 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %} /head bodyscript src{% static js/jquery-3.6.3.min.js%}/scriptscript src{% static plugins/bootstrap-3.4.1/js/bootstrap.js%}/script /body /html 加入导航 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer-fluiddiv classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapse data-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptrue aria-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navscript src{% static js/jquery-3.6.3.min.js%}/scriptscript src{% static plugins/bootstrap-3.4.1/js/bootstrap.js%}/script /body /html 完成动态数据 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href#span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs编辑/aa classbtn btn-danger btn-xs删除/a/td/tr{% endfor %}/tbody/table/div/div/div /divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html 数据从数据库里做几个后续新增就可以实现页面新增 2、实现新增部门页面 url注册 DjangoDemoOne URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.2/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path(, views.home, namehome) Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path(, Home.as_view(), namehome) Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path(blog/, include(blog.urls))from django.contrib import admin from django.urls import path from TestManagementSystem import viewsurlpatterns [# path(admin/, admin.site.urls),path(depart/list/, views.depart_list),path(depart/add/, views.depart_add), ]新增depart_add.html页面 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs编辑/aa classbtn btn-danger btn-xs删除/a/td/tr{% endfor %}/tbody/table/div/div/div /divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html depart_list新增链接到depart_add页面 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs编辑/aa classbtn btn-danger btn-xs删除/a/td/tr{% endfor %}/tbody/table/div/div/div /divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html views新增depart_add方法 from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models # Create your views here.def depart_list(request):部门列表# 查询所有部门depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门 # return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)3、实现删除部门 url注册 DjangoDemoOne URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.2/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path(, views.home, namehome) Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path(, Home.as_view(), namehome) Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path(blog/, include(blog.urls))from django.contrib import admin from django.urls import path from TestManagementSystem import viewsurlpatterns [# path(admin/, admin.site.urls),path(depart/list/, views.depart_list),path(depart/add/, views.depart_add),path(depart/delete/, views.depart_delete), ]修改depart_list页面的修改删除按钮业务 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs编辑/aa classbtn btn-danger btn-xs href/depart/delete/?departid{{ obj.id }}删除/a/td/tr{% endfor %}/tbody/table/div/div/div /divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html 修改views.py新增depart_delete方法 from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models # Create your views here.def depart_list(request):部门列表# 查询所有部门depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门# return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)def depart_delete(request):删除部门depart_id request.GET.get(departid)models.Department.objects.filter(iddepart_id).delete()return redirect(/depart/list) 4、实现部门编辑功能 url注册 DjangoDemoOne URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.2/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path(, views.home, namehome) Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path(, Home.as_view(), namehome) Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path(blog/, include(blog.urls))from django.contrib import admin from django.urls import path from TestManagementSystem import viewsurlpatterns [# 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), ]修改depart_list编辑页面 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title部门列表/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs href/depart/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/depart/delete/?departid{{ obj.id }}删除/a/td/tr{% endfor %}/tbody/table/div/div/div /divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html views.py新增depart_edit方法 from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models # Create your views here.def depart_list(request):部门列表# 查询所有部门depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门# return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)def depart_delete(request):删除部门depart_id request.GET.get(departid)models.Department.objects.filter(iddepart_id).delete()return redirect(/depart/list)def depart_edit(request, nid):编辑部门if request.method GET:row_object models.Department.objects.filter(idnid).first()# print(row_object.id, row_object.name)return render(request, depart_edit.html, {row_object: row_object})# 获取用户提交的部门名称edit_depart_name request.POST.get(departname)# 根据编辑页面用户ID去更新部门的名称models.Department.objects.filter(idnid).update(nameedit_depart_name)return redirect(/depart/list) 新增depart_edit.html页面 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8title新增部门/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}//head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdivdiv classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新增部门/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel部门名称/labelinput typetext classform-control placeholder部门名称 namedepartname/divbutton typesubmit classbtn btn-primary保 存/button/form/div/div/div /div/body /html 修改后的值 七、模版的继承 #模版块 {% block content %}{% endblock %} 1、创建模板layout.html 1将公共的部分写进模版 {% load static %} !DOCTYPE html html langen headmeta charsetUTF-8{% block title %}{% endblock %}link relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}/style.navbar{border-radius: 0;}/style /head bodynav classnavbar navbar-defaultdiv classcontainer !-- div classcontainer-fluid --div classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href#测试管理系统/a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/depart/list/部门管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalse春天的菠菜 span classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div /navdiv{% block content %}{% endblock %}/divscript src{% static js/jquery-3.6.3.min.js %}/script script src{% static plugins/bootstrap-3.4.1/js/bootstrap.js %}/script /body /html 2后续新的html页面使用下面方法继承模版 {% extends layout.html %} {% block title %}{% endblock %} {% block content %}{% endblock %} 2、将depart_list.html页面使用模版重构 {% extends layout.html %} {% block title %}title部门列表/title {% endblock %} {% block content %}div classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span部门列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth名称/thth操作/th/tr/theadtbody{% for obj in depart_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtda classbtn btn-primary btn-xs href/depart/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/depart/delete/?departid{{ obj.id }}删除/a/td/tr{% endfor %}/tbody/table/div/div/div{% endblock %} 3、将depart_add.html页面重构 {% extends layout.html %} {% block title %}title新增部门/title {% endblock %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新增部门/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel部门名称/labelinput typetext classform-control placeholder部门名称 namedepartname/divbutton typesubmit classbtn btn-primary保 存/button/form/div/div/div{% endblock %}4、将depart_edit.html页面重构 {% extends layout.html %} {% block title %}title编辑部门/title {% endblock %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title编辑部门/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel部门名称/labelinput typetext classform-control placeholder部门名称 namedepartname value{{ row_object.name }}/divbutton typesubmit classbtn btn-primary保 存/button/form/div/div/div {% endblock %} 八、页面实战-用户管理 1、uri注册 因为和部门管理类似 from django.contrib import admin from django.urls import path from TestManagementSystem import viewsurlpatterns [# 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),path(user/model/form/add/, views.user_model_form_add), # 新方法实现path(user/int:nid/edit/, views.user_edit),path(user/int:nid/delete/, views.user_delete) # 与部门删除方式不一样 ]2、views.py 新增类 class UserModelForm(forms.ModelForm) 与def user_model_form_add(request)方法 from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models from django import forms # Create your views here.def depart_list(request):部门列表# 查询所有部门print(部门列表)depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门# return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)def depart_delete(request):删除部门depart_id request.GET.get(departid)models.Department.objects.filter(iddepart_id).delete()return redirect(/depart/list)def depart_edit(request, nid):编辑部门if request.method GET:row_object models.Department.objects.filter(idnid).first()# print(row_object.id, row_object.name)return render(request, depart_edit.html, {row_object: row_object})# 获取用户提交的部门名称edit_depart_name request.POST.get(departname)# 根据编辑页面用户ID去更新部门的名称models.Department.objects.filter(idnid).update(nameedit_depart_name)return redirect(/depart/list)def user_list(request):用户列表# 查询所有用户user_set models.UserInfo.objects.all()for obj in user_set:print(obj.id, obj.name, obj.password, obj.account, obj.create_time.strftime(%Y-%m-%d-%H-%M-%S),obj.get_gender_display(), obj.depart.name)return render(request, user_list.html, {user_set: user_set})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_name request.POST.get(username)password request.POST.get(pwd)age request.POST.get(age)account request.POST.get(ac)create_time request.POST.get(ctime)gender request.POST.get(gd)depart_id request.POST.get(dp)models.UserInfo.objects.create(nameuser_name, passwordpassword,ageage, accountaccount,create_timecreate_time,gendergender, depart_iddepart_id)return redirect(/user/list)class UserModelForm(forms.ModelForm):# 限制姓名的长度至少为3位name forms.CharField(min_length3, label用户名)# password forms.CharField(label密码,validators这里写正则表达式)class Meta:model models.UserInfofields [name, password, age, account, create_time, gender, depart]widgets {name: forms.TextInput(attrs{class: form-control}),password: forms.PasswordInput(attrs{class: form-control}),age: forms.TextInput(attrs{class: form-control}),account: forms.TextInput(attrs{class: form-control}) } # 下方方法更好def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有插件添加了class: from-controlfor name, field in self.fields.items():field.widget.attrs {class: form-control, placeholder: field.label}def user_model_form_add(request):新增用户ModelForm方式if request.method GET:form UserModelForm()return render(request, user_model_form_add.html, {form: form})# POST 请求提交的数据数据校验form UserModelForm(datarequest.POST)if form.is_valid():# 如果数据合法这里判断的是所有字段不能为空则存储到数据库# models.UserInfo.objects.create(..) 常规存储方式form.save()return redirect(/user/list)# 如果不满足if判断进入到else返回错误信息return render(request, user_model_form_add.html, {form: form}) 3、用户列表页面 {% extends layout.html %} {% block title %}title用户列表/title {% endblock %} {% block content %}div classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/user/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建/aa classbtn btn-success href/user/model/form/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建(ModelForm方式)/a/divdiv classbs-example data-example-idpanel-without-body-with-tablediv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span用户列表/div!-- Table --table classtable table-borderedtheadtrth序号/thth姓名/thth密码/thth年龄/thth余额/thth入职时间/thth性别/thth所属部门/thth操作/th/tr/theadtbody{% for obj in user_set %}trth scoperow{{ obj.id }}/thtd{{ obj.name }}/tdtd{{ obj.password }}/tdtd{{ obj.age }}/tdtd{{ obj.account }}/tdtd{{ obj.create_time|date:Y-m-d H:i:s }}/tdtd{{ obj.get_gender_display }}/tdtd{{ obj.depart.name }}/tdtda classbtn btn-primary btn-xs href/user/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/user/{{ obj.id }}/delete/删除/a/td/tr{% endfor %}/tbody/table/div/div/div{% endblock %} 4、添加用户user_add.html--- 老方法 {% extends layout.html %} {% block title %}title新增用户/title {% endblock %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新增用户/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel姓名/labelinput typetext classform-control placeholder姓名 nameusername/divdiv classform-grouplabel密码/labelinput typetext classform-control placeholder密码 namepwd/divdiv classform-grouplabel年龄/labelinput typetext classform-control placeholder年龄 nameage/divdiv classform-grouplabel余额/labelinput typetext classform-control placeholder余额 nameac/divdiv classform-grouplabel入职时间/labelinput typetext classform-control placeholder入职时间 namectime/divdiv classform-grouplabel性别/labelselect classform-control namegd{% for item in gender_choices %}option value{{ item.0 }}{{ item.1 }}/option{% endfor %}!--option value1男/optionoption value2女/option --/select/divdiv classform-grouplabel所属部门/labelselect classform-control namedp{% for item in depart_list %}option value{{ item.id }}{{ item.name }}/option{% endfor %}/select/divbutton typesubmit classbtn btn-primary保 存/button/form/div/div/div{% endblock %} 5、添加用户user_model_form_add.html--- 新方法ModelForm 修改model.py {% extends layout.html %} {% block title %}title新增用户(ModelForm)/title {% endblock %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新增用户/h3/divdiv classpanel-bodyform methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary保 存/button/form/div/div/div{% endblock %}6、解决提示英文问题 修改settings.py 7、编辑用户 -新增user_edit.html页面 新增user_edit.html页面url前面全部配置好了 {% extends layout.html %} {% block title %}title编辑用户/title {% endblock %} {% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title编辑用户/h3/divdiv classpanel-bodyform methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary保 存/button/form/div/div/div {% endblock %} 8、编辑用户 -修改views.py from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models from django import forms # Create your views here.def depart_list(request):部门列表# 查询所有部门print(部门列表)depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门# return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)def depart_delete(request):删除部门depart_id request.GET.get(departid)models.Department.objects.filter(iddepart_id).delete()return redirect(/depart/list)def depart_edit(request, nid):编辑部门if request.method GET:row_object models.Department.objects.filter(idnid).first()# print(row_object.id, row_object.name)return render(request, depart_edit.html, {row_object: row_object})# 获取用户提交的部门名称edit_depart_name request.POST.get(departname)# 根据编辑页面用户ID去更新部门的名称models.Department.objects.filter(idnid).update(nameedit_depart_name)return redirect(/depart/list)def user_list(request):用户列表# 查询所有用户user_set models.UserInfo.objects.all()for obj in user_set:print(obj.id, obj.name, obj.password, obj.account, obj.create_time.strftime(%Y-%m-%d-%H-%M-%S),obj.get_gender_display(), obj.depart.name)return render(request, user_list.html, {user_set: user_set})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_name request.POST.get(username)password request.POST.get(pwd)age request.POST.get(age)account request.POST.get(ac)create_time request.POST.get(ctime)gender request.POST.get(gd)depart_id request.POST.get(dp)models.UserInfo.objects.create(nameuser_name, passwordpassword,ageage, accountaccount,create_timecreate_time,gendergender, depart_iddepart_id)return redirect(/user/list)class UserModelForm(forms.ModelForm):# 限制姓名的长度至少为3位name forms.CharField(min_length3, label用户名)# password forms.CharField(label密码,validators这里写正则表达式)class Meta:model models.UserInfofields [name, password, age, account, create_time, gender, depart]widgets {name: forms.TextInput(attrs{class: form-control}),password: forms.PasswordInput(attrs{class: form-control}),age: forms.TextInput(attrs{class: form-control}),account: forms.TextInput(attrs{class: form-control}) } # 下方方法更好def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有插件添加了class: from-controlfor name, field in self.fields.items():field.widget.attrs {class: form-control, placeholder: field.label}def user_model_form_add(request):新增用户ModelForm方式if request.method GET:form UserModelForm()return render(request, user_model_form_add.html, {form: form})# POST 请求提交的数据数据校验form UserModelForm(datarequest.POST)if form.is_valid():# 如果数据合法这里判断的是所有字段不能为空则存储到数据库# models.UserInfo.objects.create(..) 常规存储方式form.save()return redirect(/user/list)# 如果不满足if判断进入到else返回错误信息return render(request, user_model_form_add.html, {form: form})def user_edit(request, nid):编辑用户# 根据nid去数据库获取所在行数据row_object models.UserInfo.objects.filter(idnid).first()if request.method GET: form UserModelForm(instancerow_object)return render(request, user_edit.html, {form: form})# POST 请求提交的数据数据校验 form UserModelForm(datarequest.POST, instancerow_object)if form.is_valid():# 如果数据合法这里判断的是所有字段不能为空则存储到数据库# models.UserInfo.objects.create(..) 常规存储方式# form.instance.字段名值 # 如果需要存储用户输入之外的值使用这个form.save()return redirect(/user/list)# 如果不满足if判断进入到else返回错误信息return render(request, user_edit.html, {form: form}) 9、修改数据库入职时间为年月日格式 执行命令 python manage.py makemigrations python manage.py migrate 修改user_list.html,删除红色方框 10、删除用户在views.py新增user_delete方法 from django.shortcuts import render, redirect, HttpResponse from TestManagementSystem import models from django import forms # Create your views here.def depart_list(request):部门列表# 查询所有部门print(部门列表)depart_set models.Department.objects.all()return render(request, depart_list.html, {depart_set: depart_set})def depart_add(request):新增部门# 新增部门# return HttpResponse(成功)if request.method GET:return render(request, depart_add.html)depart_name request.POST.get(departname)models.Department.objects.create(namedepart_name)return redirect(/depart/list)def depart_delete(request):删除部门depart_id request.GET.get(departid)models.Department.objects.filter(iddepart_id).delete()return redirect(/depart/list)def depart_edit(request, nid):编辑部门if request.method GET:row_object models.Department.objects.filter(idnid).first()# print(row_object.id, row_object.name)return render(request, depart_edit.html, {row_object: row_object})# 获取用户提交的部门名称edit_depart_name request.POST.get(departname)# 根据编辑页面用户ID去更新部门的名称models.Department.objects.filter(idnid).update(nameedit_depart_name)return redirect(/depart/list)def user_list(request):用户列表# 查询所有用户user_set models.UserInfo.objects.all()for obj in user_set:print(obj.id, obj.name, obj.password, obj.account, obj.create_time.strftime(%Y-%m-%d-%H-%M-%S),obj.get_gender_display(), obj.depart.name)return render(request, user_list.html, {user_set: user_set})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_name request.POST.get(username)password request.POST.get(pwd)age request.POST.get(age)account request.POST.get(ac)create_time request.POST.get(ctime)gender request.POST.get(gd)depart_id request.POST.get(dp)models.UserInfo.objects.create(nameuser_name, passwordpassword,ageage, accountaccount,create_timecreate_time,gendergender, depart_iddepart_id)return redirect(/user/list)class UserModelForm(forms.ModelForm):# 限制姓名的长度至少为3位name forms.CharField(min_length3, label用户名)# password forms.CharField(label密码,validators这里写正则表达式)class Meta:model models.UserInfofields [name, password, age, account, create_time, gender, depart]widgets {name: forms.TextInput(attrs{class: form-control}),password: forms.PasswordInput(attrs{class: form-control}),age: forms.TextInput(attrs{class: form-control}),account: forms.TextInput(attrs{class: form-control}) } # 下方方法更好def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有插件添加了class: from-controlfor name, field in self.fields.items():field.widget.attrs {class: form-control, placeholder: field.label}def user_model_form_add(request):新增用户ModelForm方式if request.method GET:form UserModelForm()return render(request, user_model_form_add.html, {form: form})# POST 请求提交的数据数据校验form UserModelForm(datarequest.POST)if form.is_valid():# 如果数据合法这里判断的是所有字段不能为空则存储到数据库# models.UserInfo.objects.create(..) 常规存储方式form.save()return redirect(/user/list)# 如果不满足if判断进入到else返回错误信息return render(request, user_model_form_add.html, {form: form})def user_edit(request, nid):编辑用户# 根据nid去数据库获取所在行数据row_object models.UserInfo.objects.filter(idnid).first()if request.method GET:form UserModelForm(instancerow_object)return render(request, user_edit.html, {form: form})# POST 请求提交的数据数据校验form UserModelForm(datarequest.POST, instancerow_object)if form.is_valid():# 如果数据合法这里判断的是所有字段不能为空则存储到数据库# models.UserInfo.objects.create(..) 常规存储方式# form.instance.字段名值 # 如果需要存储用户输入之外的值使用这个form.save()return redirect(/user/list)# 如果不满足if判断进入到else返回错误信息return render(request, user_edit.html, {form: form})def user_delete(request, nid):删除用户# 根据nid去数据库获取所在行数据进行删除models.UserInfo.objects.filter(idnid).delete()return redirect(/user/list) 源码下载点我下载
http://www.tj-hxxt.cn/news/230253.html

相关文章:

  • 网站建设seo基本要求自己做一个网站难不难
  • 偷dede网站模板打开网站建设中是什么意思
  • 网站必须做电子标识信息罗湖做网站公司排名
  • 南阳提高网站排名网站建设计划书1200字
  • 昆明市建设局官方网站查学校去哪个网站
  • 网站升级建设方案工业云网站建设
  • 无锡网站制作中心我想要个网站
  • 静态网站 后台seo专员简历
  • 服务器添加网站电子商城网站建设报告
  • 做外贸怎么进入国外的网站电商商城网站建设
  • 重庆网站备案快改网站字体颜色代码
  • 京东网站建设设计框架图重庆seo排名方法
  • 建设银行网站用360浏览器做公司网站需注意什么
  • 宁波专业网站制作设计网站备案怎么查
  • 仿京东电商的网站开发报价做网站到八方资源网怎么样
  • 织梦 网站地图 样式wordpress 添加 常规
  • 网站做优化一般几个字wordpress网页如何上传下载
  • 哪种网站名称容易通过备案审核数据库怎么做两个网站
  • 合肥百度团购网站建设律师用的网站模板
  • 机关门户网站 建设 方案自己想做个网站怎么做的
  • 文创产品设计网站推荐网站切图怎么切
  • 香蜜湖网站建设山西通州集团网站建设
  • 上海做高端网站建设2022年即将上市的手机
  • 网站怎么做移动端的徐州双语网站制作
  • html5网站基础优秀网页
  • 服务类的网站怎么做网站网页区别
  • 任丘住房建设局网站关键词怎么选择技巧
  • 专业制作网站多少钱沈阳企业网站制作公司
  • 电脑怎么创建网站吗成都网站快速排名
  • 重庆新闻发布会直播培训机构优化