栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第七单元 增删改查 练习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第七单元 增删改查 练习

作业

a)新建一个干净项目,项目名为day7+名字首拼
b)编写部门Department模型类,由部门名称dep_name、部门描述desc组成,并自己添加3条数据
c)编写员工Employee模型类,姓名emp_name、职位job、工资salary、部门department,并自己添加测试数据
d)实现以下功能:
主页面功能:
1.展示所有的部门信息
2.可以新增员工信息
3.点击部门名可以进入到指定部门下,展示对应部门的员工信息
员工信息页面功能:

1.员工信息的修改
2. 员工信息的删除

一、准备工作 1.1 第一步创建建一个项目

django-admin startproject day7df

1.2 创建好之后在pycharm中打开项目

在创建一个子应用

python manage.py startapp myapp

1.3 在数据库创建一个新的库

create database day7fsj charset=utf8;

1.4 在settings.py文件中修改数据
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',		# 注册子应用
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 需要在目录下创建一个template文件夹
        'DIRS': [os.path.join(BASE_DIR, 'templates')],			
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 配置mysql信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'localhost',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '自己的密码',
        'NAME': 'day7fsj'
    }
}

# 编译成中文
LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'
1.5 在项目的根目录创建templates用来创建html文件

1.6还需要在主应用的__init__.py里安装MySQL
import pymysql
pymysql.install_as_MySQLdb()
二. 编写模型类 2.1 在models.py文件中
from django.db import models

# Create your models here.
class Department(models.Model):
    dep_name = models.CharField(max_length=20, verbose_name='部门名称')
    desc = models.CharField(max_length=20, verbose_name='部门描述')

    class Meta:
        db_table = 'department' # 在数据库中的名字
        verbose_name = '部门'	# 在超级用户中显示的名字
        verbose_name_plural = verbose_name # 复数

    def __str__(self):
        return self.dep_name


class Employee(models.Model):
    emp_name = models.CharField(max_length=20, verbose_name='员工')
    job = models.CharField(max_length=20, verbose_name='职位')
    salary = models.IntegerField(verbose_name='工资')
    # 外键链接
    department = models.ForeignKey(to=Department, on_delete=models.CASCADE, verbose_name='部门')
verbose_name='身高')
		# 元类
    class Meta:
        db_table = 'employee'
        verbose_name = '职员'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.emp_name
2.2 执行迁移 2.2.1 创建迁移文件

python manage.py makemigrations

2.2.2 执行迁移

python manage.py migrate

2.3 创建超级用户添加数据

python manage.py createsuperuser

2.3.1 在admin.py中注册编写的模型类
from django.contrib import admin
# 将模型类导入进行注册
from myapp import models
# Register your models here.
admin.site.register(models.Department)
admin.site.register(models.Employee)

3. 展示部门信息 3.1 在子应用中创建urls.py用来储存路由
from django.contrib import admin
# 导入include模块 
# include意思是 把……列为一部分
from django.urls import path,include
# 将创建的urls文件导入过来
from myapp import urls
urlpatterns = [
    path('admin/', admin.site.urls),
    # 将在子应用用的urls.py中编写的路由都传到主要用的urls.py中
    path('',include(urls))
]
3.2 在views.py中编写视图类获取部门信息
# 导入redirect模块
# redirect是重定向模块 用来实现跳转
from django.shortcuts import render,redirect
from django.http import HttpResponse
# 视图类需要导入View模块
from django.views import View
# 将编写的模型类导入进来
from myapp.models import Department,Employee
# Create your views here.

# 展示部门信息
class DepartmentView(View):
    def get(self, request):
    # 将获取到的部门信息赋值
        dep_data = Department.objects.all()
        # 在templates文件夹中创建html文件用来渲染数据
        # 将数据以字典的形式传递
        return render(request, 'list.html', {'daps': dep_data})
3.3 配置路由
from django.urls import path
# 导入views模块获取视图类
from myapp import views
urlpatterns = [
    path('dep/', views.DepartmentView.as_view()),
]
3.4 编写html代码渲染信息



    
    Title


    

部门信息

{% for dap in daps %} {% endfor %}
编号 部门名称 部门描述
{{ dap.id }} {{ dap.dep_name }} {{ dap.desc }}
4. 点击部门名可以进入到指定部门下,展示对应部门的员工信息 4.1 编写视图类获取员工信息
# 展示员工信息
class EmployeeView(View):
    def get(self, request, id):
    		# 根据部门的id获取外键过滤传参过来的数据
        emp_data = Employee.objects.filter(department_id=id)
        return render(request, 'emplist.html', {'emps': emp_data})
4.2 配置动态路由
path('emp//', views.EmployeeView.as_view()),
4.3 在html文件中
     
     		# 利用差值表达式获取要删除的员工id
         {{ dap.dep_name }}
     

4.4 创建新的html文件渲染员工数据



    
    Title


    

员工信息

{% for emp in emps %} {% endfor %}
编号 姓名 职位 工资 部门
{{ emp.id }} {{ emp.emp_name }} {{ emp.job }} {{ emp.salary }} {{ emp.department }}
5. 增加员工信息 5.1 在部门html中添加表单
    

添加数据

{% csrf_token %} 姓名:
职位:
工资:
部门:
5.2 编写模型类添加数据

可以直接在部门类中编写添加数据函数

# 添加数据
    def post(self, request):
        emp_name = request.POST.get('emp_name')
        job = request.POST.get('job')
        salary = request.POST.get('salary')
        department = request.POST.get('department')
        try:
            Employee.objects.create(
                emp_name=emp_name,
                job=job,
                salary=salary,
                department_id=department
            )
        except Employee as a:
            print(a)
            return HttpResponse('添加失败')
        # 跳转到主页面
        return redirect('/dep/')
6. 员工信息的修改 6.1 编写修改代码类
# 修改数据
class UpdEmployee(View):
    def get(self, request, id):
        upd_data = Employee.objects.get(id=id)
        return render(request, 'update.html', {'upd': upd_data})
    def post(self, request, id):
        emp_name = request.POST.get('emp_name')
        job = request.POST.get('job')
        salary = request.POST.get('salary')
        department = request.POST.get('department')
        try:
            Employee.objects.filter(id=id).update(
                emp_name=emp_name,
                job=job,
                salary=salary,
                department_id=department
            )
        except Employee as a:
            print(a)
            return HttpResponse('修改失败')
			# 跳转到部门页面
        return redirect('/dep/')
6.2 配置动态路由
urlpatterns = [
    path('upd/',views.UpdateUser.as_view()),
]
6.3 在员工html文件中添加修改连接
	
		修改
  
6.4 创建修改html文件写入表单



    
    Title


    

修改数据

{% csrf_token %} 姓名:
职位:
工资:
部门:
7.员工信息的删除 7.1 编写删除代码类
# 删除信息
class DelEmployee(View):
    def get(self, request, id):
    		 # 获取部门id也就是外键
        emp_del = Employee.objects.get(id=id)
        # 获取部门id也就是外键用来动态路由跳转
        sel_emp = emp_del.department_id
        emp_del.delete()
        return redirect(f'https://blog.csdn.net/emp/{sel_emp}/')
7.2 配置动态路由
  path('del//', views.DelEmployee.as_view())
7.3 在员工表单中添加删除链接
            
                删除
            
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/844491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号