前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >list、dict和set的综合应用:排课系统(4)

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

作者头像
不可言诉的深渊
发布2020-07-01 11:10:12
8190
发布2020-07-01 11:10:12
举报

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

显示课表

显示课表非常的简单,在视图中返回的 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)
]

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

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

端午安康

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

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)

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 显示课表
  • 端午安康
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档