首页 > 其他分享 >list、dict和set的综合应用:排课系统(4)

list、dict和set的综合应用:排课系统(4)

时间:2022-12-01 11:08:03浏览次数:41  
标签:set 排课 list 课表 course context scheduling import





list、dict和set的综合应用:排课系统(4)_html


上回说到,我们成功的实现了排课算法并且生成了课表,这次我们就尝试在首页显示课表,并且实现调用排课的认证。



list、dict和set的综合应用:排课系统(4)_用户名_02








显示课表


list、dict和set的综合应用:排课系统(4)_html_03


显示课表非常的简单,在视图中返回的 context 字典中只有一个键值对,格式如下:

{'grades': [(grade, table)……]}

其中 grades 是要传送到模板中把后面的值对应的元组列表进行显示,元组的第一个元素是某一个 Grade 对象,table 是当前班级的课表,格式为一个二维数组。知道这些写出显示课表的代码就很简单了。

首先是视图层的代码,course_scheduling_system\views.py 代码如下:

from django.shortcuts import render
from xlrd import open_workbook
from.models import Grade




# Create your views here.
def index(request):
workbook = open_workbook('curriculum/班级课表.xls')
context = {'grades': []}
for grade in Grade.objects.all():
sheet = workbook.sheet_by_name(str(grade))
table = [[sheet.cell(row, col).value for col in range(sheet.ncols)]for row in range(sheet.nrows)]
context['grades'].append((grade, table))
return render(request, 'index.html', context)

接下来是模板层,templates\index.html(没有文件或者目录就自己新建)代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>排课系统</title>
</head>
<body>
<h1>排课系统</h1>
<h2>班级课表</h2>
{% for grade in grades %}
<!--suppress HtmlDeprecatedAttribute -->
<table border="1">
<caption>{{ grade.0 }}班级课表</caption>
{% for row_values in grade.1 %}
<tr>
{% for value in row_values %}
<td>{{ value|linebreaksbr }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endfor %}
</body>
</html>

然后我们就尝试去把视图函数和一个 url 连起来,我们可以直接去编辑 CourseSchedulingSystem\urls.py,代码如下:

from django.contrib import admin
from django.urls import path
from course_scheduling_system.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('', index)
]

运行一下看看效果,如图所示。

list、dict和set的综合应用:排课系统(4)_html_04

虽然说没有居中啥的,看着很怪,但是能显示出来就可以了,下面我们来实现排课页面的逻辑以及实现。



端午安康


list、dict和set的综合应用:排课系统(4)_html_03


排课页面首先必定要进行认证,认证通过进行排课,认证不通过直接返回用户名密码错误,在排课的过程中需要考虑排课成功还是失败,成功返回排课成功,失败就返回排课失败。逻辑很简单,关键是认证,实现起来非常麻烦,因为管理员密码不是明文,是加密了之后存到数据库中,去框架中找出加密算法简直就是大海捞针,我们不如直接想一下有没有封装好的函数,其实是有的,直接导入就行,代码如下:

from django.contrib.auth import authenticate

导入完成之后就来编写视图函数,代码如下:

def course_scheduling(request):
context = {'result': ''}
if request.method == 'POST':
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user:
if CourseScheduling().schedule_course():
context['result'] = '排课成功'
else:
context['result'] = '排课失败'
else:
context['result'] = '用户名或密码错误'
return render(request, 'course_scheduling.html', context)

接下来是模板代码,templates\course_scheduling.html 代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>排课系统</title>
</head>
<body>
<h1>排课系统</h1>
{% if result %}
<h2>{{ result }}</h2>
{% endif %}
<form method="post">
{% csrf_token %}
<label>username:<input type="text" name="username"></label>
<label>password:<input type="password" name="password"></label>
<input type="submit" value="排课">
</form>
</body>
</html>

最后和之前一样,配置 URL,去 CourseSchedulingSystem\urls.py 的 urlpattterns 列表中添加一项,如下所示。

path('course_scheduling', course_scheduling)

最后运行一下看看效果(演示截图有点多,我就不截下来了),发现确实是符合逻辑,排课系统已经正式的讲解完成了。

今天的文章有不懂的可以后台回复“加群”,备注:小陈学Python,不备注可是会被拒绝的哦~!


list、dict和set的综合应用:排课系统(4)_用户名_06

list、dict和set的综合应用:排课系统(4)_html_07

list、dict和set的综合应用:排课系统(4)_html_08




标签:set,排课,list,课表,course,context,scheduling,import
From: https://blog.51cto.com/u_15829940/5901358

相关文章

  • list 和 dict 的复制
    我们都知道,Python中有两种可变的数据类型:list和dict。这两种数据类型对应的实例也有很多方法可以对自身进行修改,需要注意的是,这里调用修改相关的方法的时候不是返回修改......
  • list、dict和set的综合应用:排课系统(2)
    差一点我们就擦肩而过了有趣有用有态度上回说到,我们主要实现了排课系统的后台数据的定义以及每个数据对象之间的关系,这一次我们就来批量增加一些数据,为了给后面的排课算法进......
  • list、dict和set的综合应用:排课系统(1)
    差一点我们就擦肩而过了有趣有用有态度我们都知道一个程序从本质上来说就是算法+数据结构,这次就以我的本科毕业设计——排课系统为例,专门讲解如何设计排课的算法和要用到的......
  • MFC--List列表控件
           ......
  • SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) 被调用2次
    问题GAS技能输入绑定失效。直接原因在ListenServer的一端,ACharacter::SetupPlayerInputComponent在游戏开始后,被调用了2次,说明第1次输入绑定的InputComponent被移除(......
  • 记一次git reset --hard后找回上次commit的文件
    使用gitreflog按q退出知道了之前要回退到的commit提交,如:gitreset--hardHEAD@{6}快乐就又回来了很久之后,又做了个蠢事,gitadd之后,没有commit,又执行了gitreset--h......
  • springboot消息之@RabbitListener&@EnableRabbit监听消息队列的内容
    1-新建service包BookService类packagecom.example.springbootamqp.service;importcom.example.springbootamqp.bean.Book;importorg.springframework.amqp.rabbit......
  • C# List合并相同元素
     C#List合并相同元素,对相同属性的列进行求和原数据合并后     publicclassStudent{publicstring?Name{get;set;}pu......
  • LIstBox实现下拉列表
    1、初始化下拉列表DataTabledt=newDataTable();dt.Columns.Add("id");dt.Columns.Add("name");DataRowdr1=dt.NewRow()......
  • Java 集合框架2:List
    目录List1.概述2.功能拓展位置访问搜索迭代范围视图3.实现ArrayList实现原理CopyOnWriteArrayListLinkedList实现原理List1.概述List是一个有序序列,除了继承了Collect......