网站建设与管理实训总结,企业网站托管趋势,广州建设执业资格注册中心网站,房源信息一般在哪里看#联通用户管理系统#xff08;一#xff09;
1.新建项目 如果你是windows的话#xff0c;界面应该是如下的#xff1a; 2.创建app
python manage.py startapp app01一般情况下#xff1a;我们是在pycharm的终端中运行上述指令#xff0c;但是pychrm中为我们提供了工具…#联通用户管理系统一
1.新建项目 如果你是windows的话界面应该是如下的 2.创建app
python manage.py startapp app01一般情况下我们是在pycharm的终端中运行上述指令但是pychrm中为我们提供了工具点击工具找到并点击Run manage.py Task便打开了manage.py窗口相当于pychrm为我们运行了manage.py。我们直接输入startapp app01 便可以出创建app了。 如果你是windows电脑界面如下 注册app将我们创建的app注册到setting.py中 3.设计表结构django from django.db import modelsclass Department(models.Model): 部门表 title models.CharField(verbose_name标题, max_length32)class UserInfo(models.Model): 员工表 name models.CharField(verbose_name姓名, max_length16)password models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄)account models.DecimalField(verbose_name账户余额, max_digits10, decimal_places2, default0)create_time models.DateTimeField(verbose_name入职时间)# 无约束# depart_id models.BigIntegerField(verbose_name部门ID)# 1.有约束# - to与那张表关联# - to_field表中的那一列关联# 2.django自动# - 写的depart# - 生成数据列 depart_id# 3.部门表被删除# ### 3.1 级联删除depart models.ForeignKey(toDepartment, to_fieldid, on_deletemodels.CASCADE)# ### 3.2 置空# depart models.ForeignKey(toDepartment, to_fieldid, nullTrue, blankTrue, on_deletemodels.SET_NULL)# 在django中做的约束gender_choices ((1, 男),(2, 女),)gender models.SmallIntegerField(verbose_name性别, choicesgender_choices)4.在MySQL中生成表 工具连接MySQL生成数据库。 create database gx_day16 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;修改配置文件连接MySQL DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: gx_day16, # 数据库名字USER: root,PASSWORD: root123,HOST: 127.0.0.1, # 那台机器安装了MySQLPORT: 3306,}
}django命令生成数据库表 python manage.py makemigrations
python manage.py migrate如果你在测试连接数据库的过程中出现错误可以先检查settings.py文件中MYSQL数据库的配置是否正确。
表结构创建成功 5.静态文件管理
static目录 6.部门管理 我们先用最原始的方式来做之后我们再用dgango组件 Django中提供Form和ModelForm组件方便 在还没有创建新建部门的功能时为了数据是否能够显示可以进行如下操作
通过Dgano Shell插入数据
在Dgango项目的根目录下打开终端使用命令进入Django Shell:
python manage.py shell然后运行以下代码插入部门数据
from app01.models import Department
# 创建部门数据
Department.objects.creat(title人事部)
Department.objects.creat(title技术部)
Department.objects.creat(title财务部)这会 将部门数据插入到department表中。
models.py
from django.db import models# 部门管理
class Department(models.Model):部门表#id models.BigAutoField(verbose_nameID, primary_keyTrue)title models.CharField(verbose_name标题, max_length32,nullTrue,blankTrue)class UsrInfo(models.Model):员工表name models.CharField(verbose_name姓名, max_length16)password models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄, default0)account models.DecimalField(verbose_name账户余额,max_digits10,decimal_places2,default0)create_time models.DateTimeField(verbose_name入职时间)# #无约束的# depart_id models.BigIntegerField(verbose_name部门ID)#有约束# 1.—to, 与那张表关联# - to_field. 表中的那一列关联# 2.django自动# - 写的depart# - 生成数据列 depart_id# 3.部门表被删除# ####3.1 级联删除depart models.ForeignKey(to Department, to_fieldid, on_delete models.CASCADE)# ###3.2 置空#depart models.ForeignKey(to Department, to_fieldid, nullTrue, blankTrue, on_delete models.CASCADE)# 在django中做约束 男女gender_choices ((1, 男),(2,女),)gender_choices models.SmallIntegerField(verbose_name性别,choicesgender_choices)
urls.py URL configuration for Employee_Management_System project.The urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/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 app01 import views
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)]
views.py
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def depart_list(request):部门列表#却数据库中获取部门信息queryset models.Department.objects.all()return render(request,depart_list.html,{queryset:queryset})def depart_add(request):添加部门if request.method GET:return render(request,depart_add.html)# 获取用户通过post提交的是数据集title request.POST.get(title)# 保存到数据库models.Department.objects.create(titletitle)#重定项回部门列表return redirect(/depart/list/)def depart_delete(request):删除部门# 获取idnid request.GET.get(nid)# 删除models.Department.objects.filter(idnid).delete()# 跳转return redirect(/depart/list/)def depart_edit(request,nid):编辑部门if request.method GET:#根据nid获取数据row_object models.Department.objects.filter(idnid).first()return render(request,depart_edit.html,{row_object:row_object})#获取用户提交的标题根据id找到数据库中的数据并进行更新models.Department.objects.filter(idnid).update(titlerequest.POST.get(title))#重新定向会部门列表return redirect(/depart/list/)depart_list.html
{% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}style.navbar{border: 0;}/style
/head
bodynav classnavbar navbar-defaultdiv classcontainerdiv 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
/navdivdiv classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/depart/add/ span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建部门/a/divdiv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span/div!-- Table --table classtable table-bordered theadtrthID/thth名称/thth操作/th/tr/theadtbody{% for obj in queryset %}trth{{ obj.id }}/thtd{{ obj.title }}/tdtda classbtn btn-primary btn-xs href/depart/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/depart/delete/?nid{{ obj.id }}删除/a/td/tr{% endfor %}/tbody/table/div
/div/div/divscript src{% static js/jquery-3.6.0.min.js %}/scriptscript src{% static plugins/bootstrap-3.4.1/js/bootstrap.min.js %}/script/body
/htmldepart_add.html
{% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}style.navbar{border: 0;}/style
/head
bodynav classnavbar navbar-defaultdiv classcontainerdiv 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
/navdivdiv classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title新建部门/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel标题/labelinput typetext classform-control placeholder标题 nametitle/divbutton typesubmit classbtn btn-primary提交/button/form/div/div/div
/divscript src{% static js/jquery-3.6.0.min.js %}/scriptscript src{% static plugins/bootstrap-3.4.1/js/bootstrap.min.js %}/script/body
/htmldepart_edit.html
{% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}style.navbar{border: 0;}/style
/head
bodynav classnavbar navbar-defaultdiv classcontainerdiv 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
/navdivdiv classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title修改部门/h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel标题/labelinput typetext classform-control placeholder标题 nametitle value{{ row_object.title }}/divbutton typesubmit classbtn btn-primary 提交/button/form/div/div/div
/divscript src{% static js/jquery-3.6.0.min.js %}/scriptscript src{% static plugins/bootstrap-3.4.1/js/bootstrap.min.js %}/script/body
/html效果展示 7.模板的继承
部门列表添加部门编辑部门
定义目版layout.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugin...min.css %}{% block css %}{% endblock %}
/head
bodyh1标题/h1div{% block content %}{% endblock %}/divh1底部/h1script src{% static js/jquery-3.6.0.min.js %}/script{% block js %}{% endblock %}
/body
/html
继承母版
{% extends layout.html %}{% block css %}link relstylesheet href{% static pluxxx.css %}style.../style
{% endblock %}{% block content %}h1首页/h1
{% endblock %}{% block js %}script src{% static js/jqxxxin.js %}/script
{% endblock %}8.用户管理
insert into app01_userinfo(name,password,age,account,create_time,gender,depart_id) values(韩超,666,23,100.68,2020-01-11,2,1);insert into app01_userinfo(name,password,age,account,create_time,gender,depart_id) values(刘东,123,23,100.68,2010-11-11,1,4);insert into app01_userinfo(name,password,age,account,create_time,gender,depart_id) values(朱虎飞,999,33,9900.68,2021-05-11,1,1);----------------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
----------------------------------------------------------------
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | NULL | |
| password | varchar(64) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| account | decimal(10,2) | NO | | NULL | |
| create_time | datetime(6) | NO | | NULL | |
| gender | smallint(6) | NO | | NULL | |
| depart_id | bigint(20) | NO | MUL | NULL | |
----------------------------------------------------------------新建用户 原始方式理思路不会采用本质【麻烦】 - 用户提交数据没有校验。
- 错误页面上应该有错误提示。
- 页面上没一个字段都需要我们重新写一遍。 [OK]
- 关联的数据手动去获取并展示循环展示在页面。 [OK]Django组件 Form组件小简便ModelForm组件最简便
8.1 初识Form
1. views.py
class MyForm(Form):user forms.CharField(widgetforms.Input)pwd form.CharFiled(widgetforms.Input)email form.CharFiled(widgetforms.Input)account form.CharFiled(widgetforms.Input)create_time form.CharFiled(widgetforms.Input)depart form.CharFiled(widgetforms.Input)gender form.CharFiled(widgetforms.Input)def user_add(request):if request.method GET:form MyForm()return render(request, user_add.html,{form:form})2.user_add.html
form methodpost{% for field in form%}{{ field }}{% endfor %}!-- input typetext placeholder姓名 nameuser / --
/formform methodpost{{ form.user }}{{ form.pwd }}{{ form.email }}!-- input typetext placeholder姓名 nameuser / --
/form8.3 ModelForm推荐
0. models.py
class UserInfo(models.Model): 员工表 name models.CharField(verbose_name姓名, max_length16)password models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄)account models.DecimalField(verbose_name账户余额, max_digits10, decimal_places2, default0)create_time models.DateTimeField(verbose_name入职时间)depart models.ForeignKey(toDepartment, to_fieldid, on_deletemodels.CASCADE)gender_choices ((1, 男),(2, 女),)gender models.SmallIntegerField(verbose_name性别, choicesgender_choices)1. views.py
class MyForm(ModelForm):xx form.CharField*(...)class Meta:model UserInfofields [name,password,age,xx]def user_add(request):if request.method GET:form MyForm()return render(request, user_add.html,{form:form})2.user_add.html
form methodpost{% for field in form%}{{ field }}{% endfor %}!-- input typetext placeholder姓名 nameuser / --
/formform methodpost{{ form.user }}{{ form.pwd }}{{ form.email }}!-- input typetext placeholder姓名 nameuser / --
/form