Django第三课 基于Django超市订单管理系统开发

Posted 笔触狂放

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django第三课 基于Django超市订单管理系统开发相关的知识,希望对你有一定的参考价值。

概念

本文在上一文之上,针对管理员,经理,普通员工身份的用户操作供应商管理模块功能。

功能实现

供应商管理模块属于业务功能,这里管理员不具备操作权限,而经理具备与供应商之间谈合作的实际需要,因此经理具备对供应商的添加,修改,删除和查询,普通员工只能根据需要查询供应商信息,而不具备对供应商信息更改,删除和添加的权限。

管理员操作供应商管理模块

当管理员点击供应商管理模块时,超出管理员的权限范围,因此弹出提示对话框提示管理员该功能不在其权限范围内

普通员工操作供应商管理模块

普通员工因业务需要,可以查看与超市有合作关系的所有供应商信息。给服务器发送地址请求  /gysgl/?type=3 ,服务器中需要接收该请求和其type参数

urls.py

 # 接收不同身份的用户操作供应商管理的功能地址
    path('gysgl/',views.gysgl),

 views.py

# 创建方法,根据当前登录的用户的身份,分配所操作的功能
def gysgl(request):
    # 接收当前登录的用户的身份
    type=request.GET["type"]
    # 先从数据库的供应商表中把所有供应商信息查询出来
    pList=Provider.objects.all().values()
    if type == "3":
        # 说明当前登录的用户是普通员工,只能查看供应商信息
        return render(request,"pProviderList.html","pList":pList,"user":user[0])
    elif type == "2":
        # 说明当前登录的用户是经理,经理可以具备查看供应商,
        # 修改供应商,添加供应商,删除供应商的权利
        return render(request, "jProviderList.html", "pList": pList, "user": user[0])

当普通员工操作该功能时,服务器需要从数据库中将所有供应商信息查询出来,显示在html页面上

其html代码如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--供应商列表</title>
</head>
<body>
	<div style="width: 1680px;height: 1000px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username= user.userName &password= user.userPassword " style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">user.userName</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;">
			<table border="1" style="width: 90%;text-align: center;height: 800px;border-collapse: collapse;">
				<tr>
					<td>主键Id</td>
					<td>供应商编码</td>
					<td>供应商名称</td>
					<td>供应商详细描述</td>
					<td>供应商联系人</td>
					<td>联系电话</td>
					<td>地址</td>
					<td>传真</td>
				</tr>
				% for foo in pList %
				    <tr>
					<td > foo.id </td>
					<td> foo.proCode </td>
					<td> foo.proName </td>
					<td ><p style="text-overflow: ellipsis;
					overflow: hidden;white-space: nowrap;
					width: 260px;"> foo.proDesc </p>
					</td>
					<td> foo.proContact </td>
					<td> foo.proPhone </td>
					<td> foo.proAddress </td>
					<td> foo.proFax </td>
				</tr>
				% endfor %


			</table>

		</div>
	</div>
</body>
</html>

其界面效果如下

经理操作供应商管理模块

经理的工作就是需要和各种符合超市要求的供应商进行签订合作,取消合作以及修改合作信息等等,因此经理具备操作供应商管理模块的添加,修改,删除和查询权限。当经理点击供应商管理模块时,发送地址请求 /gysgl/?type=2,服务器定义地址接收请求

这时需要将信息发送给 jProviderList.html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--供应商列表</title>
</head>
<body>
	<div style="width: 1680px;height: 1000px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username= user.userName &password= user.userPassword " style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">user.userName</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;">
			<div align="left" style="height: 40px;" >
				<a href="/addProvider/" style="text-decoration: none;
				 text-align:center;  width: 50px;
				 height: 20px;
				 color: white;font-weight: bold;
				 margin-top:20px;margin-left:10px;
				 border-radius: 5px;">添加供应商</a>
			</div>
			<table border="1" style="width: 90%;text-align: center;height: 800px;border-collapse: collapse;">
				<tr>
					<td>主键Id</td>
					<td>供应商编码</td>
					<td>供应商名称</td>
					<td>供应商详细描述</td>
					<td>供应商联系人</td>
					<td>联系电话</td>
					<td>地址</td>
					<td>传真</td>
					<td>操作</td>
				</tr>

                % for foo in pList %
				    <tr>
					<td > foo.id </td>
					<td> foo.proCode </td>
					<td> foo.proName </td>
					<td ><p style="text-overflow: ellipsis;
					overflow: hidden;white-space: nowrap;
					width: 260px;"> foo.proDesc </p>
					</td>
					<td> foo.proContact </td>
					<td> foo.proPhone </td>
					<td> foo.proAddress </td>
					<td> foo.proFax </td>
                    <td>
					<a href="/getProvider/?id= foo.id "><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a>
					<a href="/deleteProvider/?id= foo.id "><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a>
					</td>
				</tr>
				% endfor %
			</table>

		</div>
	</div>
</body>
</html>

 其界面效果图如下

经理需要添加新的供应商时,点击添加供应商超链接,进入添加供应商页面

# 接收经理点击添加供应商跳转页面的地址
    path('addProvider/',views.addProvider),
# 创建方法,跳转打开添加供应商的html页面
def addProvider(request):
    return render(request,"addProvider.html","user":user[0])

其添加供应商页面代码如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--添加供应商</title>
</head>
<body>
	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username= user.userName &password= user.userPassword " style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">user.userName</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<form action="/toAddProvider/" method="post">
                % csrf_token %
				<div style="padding: 5px 0px">
				<label for="proCode">供应商编码:</label>&nbsp;
				<input id="proCode" name="proCode" type="text" placeholder="请输入供应商编码" />
				</div>
				<div style="padding: 5px 0px">
				<label for="proName">供应商名称:</label>&nbsp;
				<input id="proName" name="proName" type="text" placeholder="请输入供应商名称" />
				</div>
				<div style="padding: 5px 0px">
				<label >供应商详细描述:</label><br/>
				<textarea rows="5" cols="40" name="proDesc" placeholder="请输入主营产品内容"></textarea>
				</div>
				<div style="padding: 5px 0px">
				<label >供应商联系人:</label>&nbsp;
				<input type="text" name="proContact" placeholder="请输入联系人姓名">
				</div>
				<div style="padding: 5px 0px">
				<label >联系电话:</label>&nbsp;
				<input type="number" name="proPhone" placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >地址:</label>&nbsp;
				<input type="text" name="proAddress" placeholder="请输入地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >传真:</label>&nbsp;
				<input type="text" name="proFax" placeholder="请输入传真号码" >
				</div>
				<div style="padding: 5px 0px">
					<input type="submit"
					  value="添加"
					 style="width: 120px;background-color: green;
					 border: none;padding: 5px;border-radius: 5px;
					 color: white;"/>
				</div>
			</form>


		</div>
	</div>
</body>
</html>

其界面效果图如下

当经理输入新供应商信息之后,将数据发送给服务器

# 接收经理添加新的供应商的数据地址
    path('toAddProvider/',views.toAddProvider),
# 创建方法,接收新供应商信息
def toAddProvider(request):
    # 供应商编号
    proCode=request.POST["proCode"]
    # 供应商名称
    proName=request.POST["proName"]
    # 供应商主营业务
    proDesc=request.POST["proDesc"]
    # 供应商联系人
    proContact=request.POST["proContact"]
    # 联系人电话
    proPhone=request.POST["proPhone"]
    # 供应商地址
    proAddress=request.POST["proAddress"]
    # 传真
    proFax=request.POST["proFax"]
    # 获得当前登录系统的经理的id
    createdBy=user[0].id
    # 获得经理添加供应商的实时时间
    creationDate=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    # 不涉及修改功能,修改的经理的id默认为0
    modifyBy=0
    modifyDate=""
    # 将新供应商的数据信息添加至供应商表
    Provider.objects.create(proCode=proCode,proName=proName,proDesc=proDesc,
                            proContact=proContact,proPhone=proPhone,proAddress=proAddress,
                            proFax=proFax,createdBy=createdBy,creationDate=creationDate,
                            modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/gysgl/?type=2")

数据如果添加成功,则刷新供应商列表页面

当经理修改供应商信息需要将该供应商信息主键id发送给服务器

# 接收经理需要修改的供应商id的地址
    path('getProvider/',views.getProvider),
# 创建方法,根据经理要修改的供应商id查询供应商表,将该供应商信息显示在修改页面上
def getProvider(request):
    id=request.GET["id"]
    # 通过供应商id查询该供应商的完整信息
    provider=Provider.objects.get(id=id)
    return render(request,"updateProvider.html","provider":provider,"user":user[0])

修改供应商页面html代码如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--修改供应商</title>
</head>
<body>
	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username= user.userName &password= user.userPassword " style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">user.userName</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<form action="/updateProvider/" method="post">
                % csrf_token %
				<!-- 完成修改功能的时候,需要将主键id隐藏存储在表单页面上
					因为在完成修改的sql语句的同时,是需要条件,只有主键id是不允许被修改的,
					那么能作为条件去修改数据库表中的数据只有主键id
				 -->
				<input type="hidden" name="id" value=" provider.id ">
				<div style="padding: 5px 0px">
				<label for="proCode">供应商编码:</label>&nbsp;
				<input id="proCode" name="proCode" value=" provider.proCode " type="text" placeholder="请输入供应商编码" />
				</div>
				<div style="padding: 5px 0px">
				<label for="proName">供应商名称:</label>&nbsp;
				<input id="proName" name="proName" value=" provider.proName " type="text" placeholder="请输入供应商名称" />
				</div>
				<div style="padding: 5px 0px">
				<label >供应商详细描述:</label><br/>
				<textarea rows="5" cols="40" name="proDesc"  placeholder="请输入主营产品内容"> provider.proDesc </textarea>
				</div>
				<div style="padding: 5px 0px">
				<label >供应商联系人:</label>&nbsp;
				<input type="text" name="proContact" value=" provider.proContact " placeholder="请输入联系人姓名">
				</div>
				<div style="padding: 5px 0px">
				<label >联系电话:</label>&nbsp;
				<input type="number" name="proPhone" value=" provider.proPhone " placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >地址:</label>&nbsp;
				<input type="text" name="proAddress" value=" provider.proAddress " placeholder="请输入地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >传真:</label>&nbsp;
				<input type="text" name="proFax" value=" provider.proFax " placeholder="请输入传真号码" >
				</div>
				<div style="padding: 5px 0px">
					<input type="submit"
					  value="修改供应商信息"
					 style="background-color: green;
					 border: none;padding: 5px;border-radius: 5px;
					 color: white;"/>
				</div>
			</form>


		</div>
	</div>
</body>
</html>

其界面效果如下

当经理更新供应商信息后,将数据发送给服务器

# 接收经理更新供应商的所有信息的地址
    path('updateProvider/',views.updateProvider),

 

# 创建方法,接收更新的供应商信息
def updateProvider(request):
    # 主键id
    id=request.POST["id"]
    # 供应商编号
    proCode = request.POST["proCode"]
    # 供应商名称
    proName = request.POST["proName"]
    # 供应商主营业务
    proDesc = request.POST["proDesc"]
    # 供应商联系人
    proContact = request.POST["proContact"]
    # 联系人电话
    proPhone = request.POST["proPhone"]
    # 供应商地址
    proAddress = request.POST["proAddress"]
    # 传真
    proFax = request.POST["proFax"]
    # 标注哪个经理修改了这个供应商信息
    modifyBy=user[0].id
    # 获得修改供应商的实时时间
    modifyDate=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    # 根据供应商id从数据库中查询出旧供应商数据
    provider=Provider.objects.filter(id=id)
    # 将新数据替换旧数据
    provider.update(proCode=proCode,proName=proName,proDesc=proDesc,
                            proContact=proContact,proPhone=proPhone,proAddress=proAddress,
                            proFax=proFax,modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/gysgl/?type=2")

数据修改成功后,刷新供应商列表页面

经理还可以删除无效的供应商

# 接收经理删除指定供应商的地址
    path('deleteProvider/',views.deleteProvider),
# 创建方法,根据供应商id从数据库中删除指定的供应商信息
def deleteProvider(request):
    id=request.GET["id"]
    # 根据id查询出要删除的供应商信息
    provider=Provider.objects.filter(id=id)
    # 将该供应商删除
    provider.delete()
    # 刷新列表页面
    return HttpResponseRedirect("/gysgl/?type=2")

删除后刷新列表页面

以上是关于Django第三课 基于Django超市订单管理系统开发的主要内容,如果未能解决你的问题,请参考以下文章

Django第四课 基于Django超市订单管理系统开发

Django第四课 基于Django超市订单管理系统开发

Django第一课 基于Django超市订单管理系统开发

Django第一课 基于Django超市订单管理系统开发

Django第二课 基于Django超市订单管理系统开发

Django第二课 基于Django超市订单管理系统开发