【实战演练】Python+Django网站开发系列09-django学生选课系统-选课页面

在整个学生选课系统里面,最核心的就是选课页面了。css

咱们设定目标为:html

一、已经选修的课程,不能重复选修;前端

二、每一个学生最多可选修不超过2门课程。jquery

三、可选课程数量过多的时候,页面自动分页,每页默认最多显示10条数据。数据库

为了实现目标,这里须要使用3个东西:django

一、后端业务逻辑查询数据库,得出能够选修的课程,返回给前端页面,前端页面须要使用dataTable这个JS组件,实现即时搜索,自动分页等功能。bootstrap

二、点击前端选修按钮以后,会弹出确认的框,这个要使用弹层。后端

三、弹出里面点击确认以后,JS使用post将信息返回到后端业务逻辑函数,将学生与须要选修的课程进行链接而且写入数据库。bash


一、使用dataTable组件session

首先,为了实现自动翻页与即时搜索的功能,咱们须要引用过一个js插件。在magic->组件库->带搜索表格,查看代码能够找到jquery.data.Tables.js与dataTables.bootstrap.js这个js插件,就是能够实现自动翻页与即时搜素的关键。

10001.png

10002.png

咱们先创建一个temp.html用于测试(建立html,增长views函数,增长urls路由),而后拷贝代码。

<script type=>
        $(() {
            $().dataTable({
                lengthMenu: [],
                paging: ,ordering: ,searching: ,language: {
                    lengthMenu: + + + + + + + ,search: ,paginate: {previous: ,
                        next: ,
                        first: ,
                        last: },

                    zeroRecords: ,info: ,infoEmpty: ,infoFiltered: },
                paging: ,
                pagingType: ,});
            $().css({ width: });});
    </script>

views里面使用的据实在以前已经说过了,就是使用OCM进行跨表的链接,跨表部分须要使用“外键__字段”来进行自动链接。

<script src="/static/js/course_sel.js"></script>

urls添加路由,在数据库表课程表里面手动增长内容。

009.png

刷新前端temp页面,这样就能够实现展现后台能够选修的课程数据了。

008.png

二、制做弹层&POST数据

咱们建立独立的JS文件,而后将JS的代码拷贝到JS文件里面,而且建立函数。

1003.png

而后html里面写一个引用,引用该JS文件内容。

magicbox查找弹层,而且查看代码,将cs与js引用拷贝,将<script>内容拷贝。<script>里面有3个重点:

10004.png

10005.png

1)ok:function(),后面书让你书写点击OK按钮以后执行什么动做的。

2)onshow:function(),这个是用来调用后台逻辑函数,搜索数据库数据,而后能够在弹层中加载展现的。

3)content:就是弹层中展现的内容。能够自行替换为一个输入表单也能够。

咱们先修改title与content的内容,而后重点修改ok:function()里面要执行的内容。前端使用js向后端传输,这里须要使用post函数,post的核心格式以下:

$.post(url,data,function(){},datatype)

这样咱们就顺便将判断用户有没有重复选课,以及选课的门数是否已经到达2门的上限的判断逻辑也加上了。

select_course(sno,cno) {
    d = dialog({
            width: ,
            title: ,
            quickClose: ,
            content: ,
            ok: () {
                $.post(,{
                    :sno,
                    :cno,
                },(res) {
                    (res.result==){
                        alert()
                    }(res.result==){
                        alert()
                    }{
                        alert()
                    }
                },)
                window.location.reload();
            },
            cancelValue: ,
            cancel: () {
                console.log()
                },
            onshow: () {
                console.log()
                }
        });
        d.show();
}


三、绑定前端页面按钮

须要在选修按钮里面,增长onclick,指向函数,而且能够按照以下格式,但参数输入到JS的post函数。

<button class="btn btn-xs btn-success" id="plugin4_demo1" title="激活" onclick="select_course('{{ j.sno }}','{{ i.cno }}',)">


三、修改后端业务逻辑

使用post.get从前端获取对应的字段,而后对数据库进行搜索,进行业务逻辑判断,若是判断经过,则使用save写入,而后已JSON格式返回result是True给前端,课程重复就返回result是Repeat,大于2门就返回result是Fales给前端,前端根据后端返回的不一样内容,进行不一样的JS弹层提示。

django.http HttpResponseRedirectJsonResponse
(request):
    username = request.session.get()
    sno = request.POST.get()
    cno = request.POST.get()
    data = student.objects.filter(=username).values()
    selected_cno = student.objects.filter(=username=cno).values()
    data.count() < selected_cno.count()<:
        selected = score()
        selected.sno_id = sno
        selected.cno_id = cno
        selected.save()
        JsonResponse({:})
    data.count() < selected_cno.count() >=:
        JsonResponse({:})
    :
        JsonResponse({:})

若是点击确认提示成功选修,查看数据库中score成绩表,看看学生学号与课程号是否已经生成关联数据,若是能够,则表示已经成功了,能够进行下一步,将html代码拷贝到selcourse.htm里面,将css、js引用以及js代码拷贝到BASE02.html里面。

10006.png

(request):
    username = request.session.get()
    course_list = course.objects.all().values()
    userinfo = student.objects.filter(=username).values()
    render_to_response(())

而后刷新页面运行测试,发现基本功能已经实现,可是有点BUG。

10007.png

检查代码,发现是bootstrap重复引用了,因此就说了css与js的引用,重复的要删除,不然会引发一些不可控的bug。

10008.png

10009.png

相关文章
相关标签/搜索