这是完成后的示例图,评论一下得失:缺点就是前端过于简单不美观,优点自然是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 %}
END