【Python_Django开发笔记(三)——实例】

前言

正式进入项目实例,完成简单项目开发。

一点点准备工作

  1. 新建项目django-admin startproject myproject
  2. 生成应用程序 python manage.py startapp employee
  3. 建立数据库,连接数据库
  4. 在models.py中建立数据模型(类)
  5. 生成数据库表

生成命令如下:

python manage.py makemigrations
python manage.py migrate

数据模型类示例如下:

from django.db import models
# Create your models here.
# 单位数据模型
class Group(models.Model):
    group_name = models.CharField(max_length=32, verbose_name="所在单位")
    group_script = models.CharField(max_length=60, verbose_name='备注')

路由与视图的对应

为了层次清晰,我们建立两级URL配置文件,根URL是根目录下的urls.py文件,如下:

from django.contrib import admin
from django.urls import path, include
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    #path('index/', views.index),
    path('employee/', 
    # include()函数把二级配置包含进来
    include('employee.urls')),
]

二级URL配置文件如下:
path()函数的两个参数分别为相对路径、视图函数名

from django.urls import path

# 导入视图函数,*代表所有
# 建立数据表(UserInfo、Group)的增删改查配置项
from employee.views import *

urlpatterns = [
    # 操作人员数据表(UserInfo)相关URL配置项
    path('list_userinfo/', list_userinfo),
    # path('add_userinfo', add_userinfo),
    # path('edit_userinfo', edit_userinfo),
    # path('del_userinfo', del_userinfo),
    # 所在单位(Group)相关URL配置项
    path('list_group/', list_group),
    path('add_group/', add_group),
    path('del_group/<int:group_id>/', del_group),
    path('edit_group/<int:group_id>/', edit_group),
]

通过访问路径示例为:http://127.0.0.1:8000/employee/list_userinfo/

增删改查的函数与显示

万事俱备只欠东风,完成了数据库表和URL的创建,现在正式编写函数和动态显示界面。
在employee/views.py文件中编写相对应的视图函数,函数名据上。

实现列表查询

视图函数

#导入响应模块
from django.shortcuts import render, redirect, HttpResponse
#导入数据模型
from .models import UserInfo, Group

# Create your views here.
def list_group(request):
    group_list = Group.objects.all()
    return render(request, 'list_group.html', {'group_list': group_list})

html文件代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>人员信息列表</title>
</head>
<body>
<div align="center">
    <h1>人员信息列表</h1>
    <hr>
    <div><a href="/employee/add_group">增加一条记录</a> </div>
    <table border="1">
        <thead>
        <tr>
            <td>所在单位</td>
            <td>备注</td>
        </tr>
        </thead>
        <tbody>
    <!--传参 自list_userinfo函数传过来的是列表group_list 该列表来自数据模型 Group-->
        {% for group in group_list %}
        <tr>
            <td>{{  group.group_name }}</td>
            <td>{{ group.group_script }}</td>
            <td><a href="/employee/del_group/{{ group.id }}/">删除</a> </td>
            <td><a href="/employee/edit_group/{{ group.id }}/">修改</a> </td>
        </tr>
        {% empty %}
            <tr>
                <td colspan="4">无相关记录!</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>
</body>
</html>

实现列表增加

view函数

放在同一文件中,续写:

def add_group(request):
#前端提交数据POST,获取前端HTML文件中form的<input>标签中的值
    if request.method == 'POST':
        group_name = request.POST.get('group_name')
        group_script = request.POST.get('group_script')
        if group_name.strip() == '':
            return render(request, 'add_group.html', {'error_info': '单位名称不能为空'})
        try:
# 获取前端传值后,新建一条记录
            p = Group.objects.create(group_name=group_name, group_script=group_script)
            # 此处匹配的是urls.py中的配置项,返回语句执行list_group()视图函数
            return redirect('/employee/list_group/')
        except Exception as e:
            return render(request, 'add_group.html', {'error_info': '输入单位重复或信息错误'})
        finally:
            pass
# 不是POST请求,表示是第一次请求增加界面,就跳转到增加界面
    return render(request, 'add_group.html')

HTML文件代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>增加部门</title>
</head>
<body>
<div align="center">
  <h1>增加部门</h1>
  <hr>
  <!-- 设置form表单中的method,发生POST请求 -->
  <form action="" method="post">
    <!-- Django安全机制,防止CSRF -->
    {% csrf_token %}
    <input type="hidden" name="id" id="id" value="{{ group.id }}">
    <div>
      <label>部门:</label>
      <!-- 输入,后端通过name属性取值,id 是name的属性,函数通过属性取值 -->
        <input type="text" name="group_name" id="group_name">
    </div>
    <br>
    <div>
      <label>备注:</label>
        <input type="text" name="group_script" id="group_script">
    </div>
    <br>
    <div><input type="submit" value="保存"></div>
  </form>
</div>
<!-- 显示错误信息 -->
  {{ error_info }}
</body>
</html>

实现列表删除

view函数

继续续写:

def del_group(request, group_id):
    group_object = Group.objects.get(id=group_id)
    group_object.delete()
    return redirect('/employee/list_group/')

HTML文件代码

通过group_list界面中的按钮直接访问,不需要HTML界面。

实现列表修改

view函数

def edit_group(request, group_id):
    # 判断请求方式
    if request.method == 'POST':
        id = request.POST.get('id')
        # 获取前端提交的数据
        group_name = request.POST.get('group_name')
        group_script = request.POST.get('group_script')
        # 取出数据表记录
        group_object = Group.objects.get(id=id)
        # 给字段赋值
        group_object.group_name = group_name
        group_object.group_script = group_script
        # 保存数据到数据库表
        group_object.save()
        return redirect('/employee/list_group/')
    else:
# 不是POST提交,就是第一次请求,先取id,来自urls.py配置项,从首页获取。传参给edit_html文件
        group_object = Group.objects.get(id=group_id)
        return render(request, 'edit_group.html', {'Group': group_object})

HTML文件代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改</title>
</head>
<body>
<div align="center">
    <h1>修改部门</h1>
    <hr>
    <form action="" method="post">
        {% csrf_token %}
        <!-- 用一个type='hidden'的<input>标签保存id值,为视图函数修改记录时,提供主键值//-->
         <input type="hidden" name="id" id="id" value="{{ Group.id }}" >
        <div>
            <label>部门:</label>
                <input type="text" name="group_name" id="group_name" value="{{ Group.group_name }}">
        </div>
        <br>
        <div>
            <label>备注:</label>
                <input type="text" name="group_script" id="group_script" value="{{ Group.group_script }}">
        </div>
        <br>
        <div><input type="submit" value="保存"></div>
    </form>
    {{ error_info }}
</div>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值