Django实战(5)——学生作业批改系统demo(学生上传作业,教师作业打分,学生查看分数)

Django实战(5)——学生作业批改系统demo(学生上传作业,教师作业打分,学生查看分数)_第1张图片

这是完成后的示例图,评论一下得失:缺点就是前端过于简单不美观,优点自然是Django框架易于编码的特性。


 

这个系统主要要实现三个功能:

1)学生提交作业

2)教师批改作业

3)显示成绩供学生查看

 

我是用Django框架实现的,基于Python语言脚本的框架。关于django的一些基础知识可以查看我以前的博文:

1)网站发布(实现同一广(路)播(由)域(器)内的内网访问)

https://blog.csdn.net/qq_41938259/article/details/96571765

2)Django视图初步(多个页面,超链接至另一个网页,基本的文本显示)

https://blog.csdn.net/qq_41938259/article/details/96721414

3)DjangoMVC模式(包括css/img/js的static路径设置)

https://blog.csdn.net/qq_41938259/article/details/97555480

4)Django的ORM(ORM的概念,Model的字段,懒加载·链式调用与Queryset)

https://blog.csdn.net/qq_41938259/article/details/98194924

 

本次实战也是根据学校期末需要提交的作业要求来的,这边给出了我的GitHub链接。包含了所有的代码:

https://github.com/timTianWSRF/student_house/commit/6f669324286f7d9d6893178ac0b6ecf898f1a6e6


 

现在切入正题:

第一个要求是提交作业,于是我们可以用两个函数来完成,一个函数是用来提交学生信息(例如姓名,学号,性别,手机号等等)的表单;另一个是用来上传作业文件的函数。

这是提交学生信息的函数:

使用POST方法提交,当判定提交方法正确时,将填入并上传的数据与内嵌的数据库交互,并重定向刷新页面。

def index(request):
    students = Student.get_all()
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('index'))
    else:
        form = StudentForm()

    context = {
        'students': students,
        'form': form,
    }
    return render(request, 'index.html', context=context)

然后给出提交作业的函数:

def upload_file(request):
    students = Student.get_all()

    if request.method == "POST":    # 请求方法为POST时,进行处理
        myFile = request.FILES.get("myfile", None)    # 获取上传的文件,如果没有文件,则默认为None
        if not myFile:
            return HttpResponse("no files for upload!")
        destination = open(os.path.join("E:\\", myFile.name), 'wb+')    # 打开特定的文件进行二进制的写操作
        for chunk in myFile.chunks():      # 分块写入文件
            destination.write(chunk)
        destination.close()

然而在此之前,我们需要到模板文件models.py中去定义表单相关的字段:

from django.db import models


class Student(models.Model):
    SEX_ITEMS = [
        (1, 'male'),
        (2, 'female'),
        (0, 'unknown'),
    ]
    STATUS_ITEMS = [
        (0, 'applying'),
        (1, 'passed'),
        (2, 'refused'),
    ]
    name = models.CharField(max_length=128, verbose_name='姓名')
    sex = models.IntegerField(choices=SEX_ITEMS, verbose_name='性别')
    profession = models.CharField(max_length=128, verbose_name='学号')
    email = models.EmailField(verbose_name='电子邮箱')
    qq = models.CharField(max_length=128, verbose_name='QQ')
    phone = models.CharField(max_length=128, verbose_name='手机号码')
    created_time = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="创建时间")
    score = models.CharField(max_length=128, default="尚未批改", verbose_name='成绩')

    def __str__(self):
        return ''.format(self.name)

    class Meta:
        verbose_name = verbose_name_plural = "StudentInf"

    @classmethod
    def get_all(cls):
        return cls.objects.all()

接着补全url映射:

app_name = 'student'
urlpatterns = [
    url(r'test/', test, name='test'),
    url(r'^$', index, name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^staticfiles/(?P.*)$', serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
    url(r'test2/', test2),
    url(r'^uploadFile/$', upload_file)
]

于是第一个要求就基本实现了。


接着来说第二个要求:教师批改分数。这个就比较容易了,教师可以通过等陆后台管理系统来修改学生过分数那一项,这个过程只要在admin.py中添加一句话即可,这也同时证明了django框架的强大之处:

 list_editable = ['score']

最后一个要求也是很简单的,只要用前端代码把同学的名字和成绩显示在页面上即可:



    
        学员管理系统
    
    
        

    {% for student in students %}
  • {{ student.name }} - {{ student.score }}
  • {% endfor %}

{% csrf_token %} {{ form }}
  • Tips:文件保存在E盘

  • END

    你可能感兴趣的:(Python的学习,Django框架的学习)