Django实战(5) | 您所在的位置:网站首页 › python作业怎么交 › Django实战(5) |
这是完成后的示例图,评论一下得失:缺点就是前端过于简单不美观,优点自然是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 requesthod == '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 requesthod == "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 |
CopyRight 2018-2019 实验室设备网 版权所有 |