Django+xadmin打造在線考試系統2.0

前期利用業餘時間開發了一個在線考試系統,大家關注度還比較高,因此從構建過程詳細寫了一套製作,部署的教程:

公衆號上發佈後,大家提出了很多改進建議,本想及時修改,但是一直拖到今天才實現,下面就介紹一下全新的在線考試系統2.0。

本次修改在原有基礎上增加了以下功能:

image

紅字部分爲新加功能,此外整個系統也改頭換面,個人前端能力不是很強,做到這一步也是盡力了。

image

由於前期已經詳細講過基礎的知識,本篇文章只對新增功能進行講解。

/1/考試界面

1.0版本時只是將試題呈現在頁面上,沒有能顯示做題進度和定位功能,因此2.0着重對試卷頁面進行了美化。

將各類題型分開顯示:

image

答題卡部分通過JavaScript模板,實現對題目定位,以顯示進度。

image

爲解決1.0版本代碼寫作過於死板的問題,在exams/models中詳細定義了試卷列表類,可以有效獲取試卷的基本信息,爲頁面顯示提供便利,其中random_paper爲試卷類型,是標識試卷爲隨機抽題還是固定題目試卷:

class PaperList(models.Model):#用於查看往期考試題目可能不用
  course = models.ForeignKey(CourseList, verbose_name=u"所屬課程",on_delete=models.CASCADE)
    name = models.CharField(max_length=100, verbose_name=u"試卷名", default=u"")
    is_allow = models.BooleanField(default=False, verbose_name=u"啓用隨機組卷")
    add_time = models.DateField(default=datetime.now, verbose_name=u"開考時間")
    single_choice_num = models.IntegerField(verbose_name=u"單選題數", default=0)
    single_choice_score = models.IntegerField(verbose_name=u"單選分值", default=0)
    judgment = models.IntegerField(verbose_name=u"判斷題數", default=0)
    judgment_score = models.IntegerField(verbose_name=u"判斷分值", default=0)
    multiple_choice_num = models.IntegerField(verbose_name=u"多選題數", default=0)
    multiple_choice_score = models.IntegerField(verbose_name=u"多選分值", default=0)
    random_paper = models.BooleanField(default=True, verbose_name=u"隨機卷")

/2/訓練界面

訓練界面爲了實現刷題的功能,從題庫中讀取試題,設置上下翻、顯示答案、收藏、提交答案、退出訓練功能。

image

其中通過退出訓練鍵,將用戶訓練的進度儲存在UserRecord數據表中。

class UserRecord(models.Model):#刷題模式下記錄到哪一個題目
  user = models.ForeignKey(UserProfile, verbose_name=u"用戶",on_delete=models.CASCADE)
    course = models.ForeignKey(CourseList, verbose_name=u"課程",on_delete=models.CASCADE)
    question = models.ForeignKey(Question, verbose_name=u"題目",on_delete=models.CASCADE)
    add_time = models.DateField(verbose_name=u"錄入時間",default=datetime.now)

這樣用戶每次點擊都會進入自己上次的進度處。

/3/收藏界面

收藏部分主要分爲收藏、查看收藏結果、取消收藏。收藏功能通過按鈕觸發,對已收藏的顯示已收藏,對成功收藏的顯示收藏成功。

def collect(request,question_id):
    questions = Question.objects.filter(id=question_id)
    for question in questions:
        a = question
    if not UserCollection.objects.filter(user=request.user,question_id=question_id):
        User_Collection = UserCollection()
        User_Collection.user_id = request.user.id
        User_Collection.question_id = a.id
        User_Collection.add_time = datetime.now()
        User_Collection.course_id = a.course_id
        User_Collection.save()
        string = '<h5>收藏成功</h5>'
  return HttpResponse(string)
    else:
        string = '<h5>您已經收藏過該題了</h5>'
  return HttpResponse(string)

image

image

查看收藏爲根據用戶id進行數據表查詢:

def enquire_collect(request):
    if request.user.is_authenticated:
        collections = UserCollection.objects.filter(user_id=request.user.id)
        question_list = []
        for collection in collections:
            a = Question.objects.get(pk=collection.question_id)
            question_list.append(a)

        # question_list = tuple(question_list)
  return render(request, 'collection.html', {"question_list": question_list,})
    else:
        return render(request, "login.html", {"msg": u'爲保護用戶信息,不對未登錄用戶開放'})

image

取消收藏是對數據表進行刪除。

def del_collect(request,question_id):
    UserCollection.objects.get(id=question_id,user_id=request.user.id).delete()
    return redirect('/operations/enquire_collect/')

下篇文章將重點對主界面設計和用戶管理模塊進行講解,此外將對試用版源代碼進行開源,歡迎大家提意見。

關注公衆號,獲取海量學習資源。

image

1024程序開發者社區的交流羣已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在羣裏就技術問題進行交流,還沒有加入的小夥伴可以掃描下方“社區物業”二維碼,讓管理員幫忙拉進羣,期待大家的加入。

image

//猜你喜歡//

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章