作业流程
models.py
设计思路:
作业列表页
urls.py
from django.conf.urls import url,include
from student import views
urlpatterns = [
url(r'^my_homework/$', views.homework_list,name='my_homework'),
]
models.py
from django.db import models
import datetime
class Homework(models.Model):
"""作业模板"""
title = models.CharField(max_length=32, verbose_name='作业标题')
desc = models.TextField(verbose_name='作业需求')
scoring_point = models.TextField(verbose_name='得分点')
publish_date = models.DateField(auto_now_add=True,verbose_name='发布日期')
suggested_complete_days = models.IntegerField(verbose_name='完成天数')
from crm.models import Student
class HomeworkRecord(models.Model):
"""学生作业记录"""
homework = models.ForeignKey('Homework')
student = models.ForeignKey(Student,verbose_name='学生',null=True,blank=True)
status_choices = ((0,'未提交'),(1,'待批改'),(2,'已批改'),(3,'迟交'))
status = models.SmallIntegerField(verbose_name='作业状态',choices=status_choices)
teacher_comments = models.TextField(verbose_name='导师点评',null=True,blank=True)
score = models.SmallIntegerField(verbose_name='分数',default=0)
upload_time = models.DateTimeField(verbose_name='提交时间',null=True,blank=True)
class Student(models.Model):
"""学生"""
student = models.OneToOneField('StudentEnrollment') # 只有走完报名流程才会成为正式学员
user_account = models.OneToOneField('UserProfile') # 创建用户
手动在后台中学生对象:
- 1、后台中创建学生
- 2、注册新用户userprofile;
- 3、进入后台为userprifile指定角色;
- 4、创建student指定关联的学生 和 userprofile
手动在后台中给学生对象 分配 作业
views.py
from django.shortcuts import render,HttpResponse
from django.contrib.auth.decorators import login_required
@login_required
def homework_list(request):
if request.user.is_superuser:
# 若为admin管理员,则取出所有作业记录
homework_record_list = HomeworkRecord.objects.all()
else:
student = request.user.student
homework_record_list = HomeworkRecord.objects.filter(student=student)
前端页面
{% block right_content %}
<div class="panel panel-primary">
<div class="panel-heading">
<h4>作业列表</h4>
</div>
<div class="panel-body" style="">
{# 导航栏 #}
<div class="row">
<!-- 循环每条作业记录 -->
{% for record in homework_record_list %}
<div class="col-lg-4" style="box-shadow: 0 2px 4px 0 #d0d0d0;">
<h4>{{ record.homework.title }}</h4>
<p class="">状态:<span style="color: {% ifequal record.status 0 %}red{% else %}#84CC39{% endifequal %}">
{{ record.get_status_display }}</span></p>
<p class="">得分:<span style="color: #84CC39">{{ record.score }}分</span></p>
<p class="">截止日期:<span>{% get_date record.homework.publish_date record.homework.suggested_complete_days %}</span></p>
<p>学员:<span style="color: #adadad">{{ record.student.student.customer.name }}</span></p>
<p class="desc"><a class="btn btn-success" href="{% url 'homework_detail' record.id %}"
role="button">详细信息 »</a></p>
</div>
{% endfor %}
</div><!--/row-->
</div>
</div>
{% endblock %}
作业详情页
urls.py
from django.conf.urls import url,include
from student import views
urlpatterns = [
url(r'^my_homework/(\d+)/$', views.homework_detail,name='homework_detail'),
]
views.py
@login_required
def homework_detail(request,record_id):
homework_record = HomeworkRecord.objects.filter(id=int(record_id)).first()
# 获取用户已经上传的作业记录
if request.method == 'GET':
upload_files = []
from django import conf
import os
# 根据作业记录id找到当前作业的目录
homework_upload_dir = os.path.join(conf.settings.STUDENT_HOWEWORK_DIR, record_id)
if os.path.isdir(homework_upload_dir):
# 取出作业列表
upload_files = os.listdir(homework_upload_dir)
return render(request,'student/homework_detail.html',locals())
前端页面
{% block right_content %}
<div class="panel panel-primary">
<div class="panel-heading">
<h3>我的作业</h3>
</div>
<div class="panel-body" style="">
<p>我的成绩:<span style="color:#fd7b4d">{{ homework_record.score }}分</span></p>
<p>作业题目:<span>{{ homework_record.homework.title }}</span></p>
<p>作业需求:</p>
<pre>{{ homework_record.homework.desc }}</pre>
<p>踩分点:</p>
<pre>{{ homework_record.homework.scoring_point }}</pre>
<p>导师点评:</p>
<pre>{{ homework_record.teacher_comments }}</pre>
<hr>
<p>已上传文件</p>
<div style="margin-top: 20px" id="upload_file_list">
{# 此处 f 为文件名称 #}
{% for f in upload_files %}
<p id="{% replace_str f %}">{{ f }}<span class="btn delete_file" style="color: red">删除</span><a
href="{% url 'homework_download' homework_record.id f %}" class="download_file" style="display: inline">下载</a></p>
{% endfor %}
</div>
<form action="{% url 'homework_upload' homework_record.id %}" class="dropzone" id="myAwesomeDropzone">
{% csrf_token %}
<div class="fallback">
<input name="file" type="file" multiple />
</div>
</form>
</div>
</div>
{% endblock %}