1 課題背景
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,越來越多智能手段代替了傳統(tǒng)依靠大量人力、物力才能解決的問題。目前,Java認(rèn)證、DB2認(rèn)證、全國(guó)計(jì)算機(jī)等級(jí)考試等均采用了在線考試的方式進(jìn)行。Python作為一種先進(jìn)的計(jì)算機(jī)語言,具有簡(jiǎn)潔、易讀、可擴(kuò)展等特性,被各個(gè)企業(yè)廣泛應(yīng)用,進(jìn)而導(dǎo)致社會(huì)對(duì)Python人才的需求急劇增長(zhǎng)。為了適應(yīng)社會(huì)的需求,開設(shè)Python課程的高校越來越多。然而,傳統(tǒng)Python考試工作需要人工完成出題、印刷以及判分等工作,需要花費(fèi)大量時(shí)間和精力。通過Python在線考試系統(tǒng)達(dá)到了簡(jiǎn)化考試流程的目的,實(shí)現(xiàn)了試卷批閱、統(tǒng)計(jì)成績(jī)等的自動(dòng)化,減輕了教師和管理人員的工作量
2 實(shí)現(xiàn)效果
本在線考試網(wǎng)主要采用在Pycharm嵌入Django動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的B/S結(jié)構(gòu)設(shè)計(jì),系統(tǒng)從安全性、易維護(hù)性等方面著手實(shí)現(xiàn)了后臺(tái)管理端和前臺(tái)客戶端的分離。系統(tǒng)設(shè)計(jì)過程中用到了網(wǎng)頁(yè)制作關(guān)鍵技術(shù),如用框架和CSS樣式表來控制布局,還用了Python腳本語言實(shí)現(xiàn)前臺(tái)瀏覽器端的校驗(yàn)功能。Python模式是Web網(wǎng)站開發(fā)較為成功的解決方案,因此在本系統(tǒng)中也采用了這一模式來設(shè)計(jì)。
登錄界面注冊(cè)界面
題目選擇
主界面
考試界面
成績(jī)查詢
個(gè)人中心
關(guān)鍵代碼
from django.db import models
from question.models import Choice, Fill, Judge, Program
from user.models import Student, Clazz
from datetime import datetime
import random
# Create your models here.
class Paper(models.Model):
"""試卷模型類"""
LEVEL_CHOICES = (
('1', '入門'),
('2', '簡(jiǎn)單'),
('3', '普通'),
('4', '較難'),
('5', '困難')
)
name = models.CharField("試卷名稱", max_length=20, default="")
score = models.PositiveSmallIntegerField("總分", default=100)
choice_number = models.PositiveSmallIntegerField("選擇題數(shù)", default=10)
fill_number = models.PositiveSmallIntegerField("填空題數(shù)", default=10)
judge_number = models.PositiveSmallIntegerField("判斷題數(shù)", default=10)
program_number = models.PositiveSmallIntegerField("編程題數(shù)", default=5)
level = models.CharField("難度等級(jí)", max_length=1, choices=LEVEL_CHOICES, default="1")
class Meta:
ordering = ["id"]
verbose_name = "試卷"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.score = (self.choice_number + self.fill_number + self.judge_number) * 2 + self.program_number * 8
super().save(*args, **kwargs)
class Exam(models.Model):
"""考試模型類"""
name = models.CharField("考試名稱", max_length=20, default="")
exam_date = models.DateField("考試日期", default="")
total_time = models.PositiveSmallIntegerField("時(shí)長(zhǎng)", default=120, help_text="時(shí)長(zhǎng)按照分鐘填寫")
paper = models.OneToOneField(Paper, on_delete=models.CASCADE, verbose_name="試卷", default="")
major = models.CharField("專業(yè)", max_length=20, default="")
tips = models.TextField("考生須知", default="")
clazzs = models.ManyToManyField(Clazz, verbose_name="參加考試的班級(jí)")
class Meta:
ordering = ["id"]
db_table = 'exam_info'
verbose_name = "考試"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Grade(models.Model):
"""成績(jī)模型類"""
exam = models.ForeignKey(Exam, verbose_name="考試", on_delete=models.CASCADE)
student = models.ForeignKey(Student, verbose_name="學(xué)生", on_delete=models.CASCADE)
score = models.PositiveSmallIntegerField("分?jǐn)?shù)", default="")
create_time = models.DateTimeField("創(chuàng)建日期", auto_now_add=True)
update_time = models.DateTimeField("修改日期", auto_now=True)
class Meta:
ordering = ['id']
verbose_name = '成績(jī)'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.id}的{self.student}為{self.score}分'
class Practice(models.Model):
"""模擬練習(xí)"""
name = models.CharField("練習(xí)名稱", max_length=20)
student = models.ForeignKey(Student, verbose_name="學(xué)生", on_delete=models.CASCADE)
create_time = models.DateTimeField("練習(xí)時(shí)間", auto_now_add=True)
class Meta:
ordering = ['id']
verbose_name = '練習(xí)'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.name = f'模擬練習(xí){datetime.now().strftime("%Y%m%d")}{random.randint(1000, 9999)}'
super().save(*args, **kwargs)
3 Django框架
Django是一個(gè)基于Web的應(yīng)用框架,由python編寫。Web開發(fā)的基礎(chǔ)是B/S架構(gòu),它通過前后端配合,將后臺(tái)服務(wù)器的數(shù)據(jù)在瀏覽器上展現(xiàn)給前臺(tái)用戶的應(yīng)用。Django本身是基于MVC模型,即Model(模型)+View(視圖)+ Controller(控制器)設(shè)計(jì)模式,View模塊和Template模塊組成了它的視圖部分,這種結(jié)構(gòu)使動(dòng)態(tài)的邏輯是剝離于靜態(tài)頁(yè)面處理的。 Django框架的Model層本質(zhì)上是一套ORM系統(tǒng),封裝了大量的數(shù)據(jù)庫(kù)操作API,開發(fā)人員不需要知道底層的數(shù)據(jù)庫(kù)實(shí)現(xiàn)就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查等操作。Django強(qiáng)大的QuerySet設(shè)計(jì)能夠?qū)崿F(xiàn)非常復(fù)雜的數(shù)據(jù)庫(kù)查詢操作,且性能接近原生SQL語句。Django支持包括PostgreSQL、My Sql、SQLite、Oracle在內(nèi)的多種數(shù)據(jù)庫(kù)。Django的路由層設(shè)計(jì)非常簡(jiǎn)潔,使得將控制層、模型層和頁(yè)面模板獨(dú)立開進(jìn)行開發(fā)成為可能。基于Django的Web系統(tǒng)工程結(jié)構(gòu)示意圖如圖所示。
從圖中可以看到,一個(gè)完整的Django工程由數(shù)個(gè)分應(yīng)用程序組成,每個(gè)分應(yīng)用程序包括四個(gè)部分:
urls路由層:決定Web系統(tǒng)路由結(jié)構(gòu),控制頁(yè)面間的跳轉(zhuǎn)和數(shù)據(jù)請(qǐng)求路徑
views視圖層:業(yè)務(wù)層,主要進(jìn)行邏輯操作和運(yùn)算,是前端頁(yè)面模板和后端數(shù)據(jù)庫(kù)之間的橋梁。Django框架提供了大量的數(shù)據(jù)庫(kù)操作API,開發(fā)人員甚至不需要使用SQL語句即可完成大部分的數(shù)據(jù)庫(kù)操作。
models模型層:Web應(yīng)用連接底層數(shù)據(jù)庫(kù)的關(guān)鍵部分,封裝了數(shù)據(jù)庫(kù)表結(jié)構(gòu)和實(shí)現(xiàn)。開發(fā)人員可以在Model層按照Django的指令要求進(jìn)行建表,無須使用SQL語句或者第三方建表工具進(jìn)行建表。建表的過程類似于定義變量和抽象編程語言中的類,非常方便。
templates模板層:HTML模板文件,后端數(shù)據(jù)會(huì)填充HTML模板,渲染之后返回給前端請(qǐng)求。考慮到項(xiàng)目周期盡可能小,盡快完成平臺(tái)的搭建,項(xiàng)目決定采用開源的Django框架開發(fā)整個(gè)系統(tǒng)的Web應(yīng)用層。
關(guān)鍵代碼
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ExamOnline.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
4 VUE
簡(jiǎn)介
Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。Vue采用自底向上增量開發(fā)的設(shè)計(jì),提供了MVVM數(shù)據(jù)綁定和可組合的組件系統(tǒng),具有簡(jiǎn)單、靈活的API,通過簡(jiǎn)單的API可實(shí)現(xiàn)響應(yīng)式的數(shù)據(jù)綁定和可組合的視圖組件。
特點(diǎn)
Vue.js 使用了基于 HTML 的模版語法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實(shí)例的數(shù)據(jù)。
Vue.js 的核心是一個(gè)允許你采用簡(jiǎn)潔的模板語法來聲明式的將數(shù)據(jù)渲染進(jìn) DOM 的系統(tǒng)。
vue.js 支持路由功能開發(fā)的 叫vue-route.js,vue.js支持?jǐn)?shù)據(jù)請(qǐng)求功能開發(fā)的 叫vue-resource.js,李祥需求查資料求證?
vue.js 下載過來直接在html中引入就能使用,并不一定要npm install vue,那仕么業(yè)務(wù)開發(fā)需求場(chǎng)景下需要使用NPM呢?NPM是仕么?
Vue.js可以在html里直接引用后使用,等到與Vue一起配合使用的第三方應(yīng)用的庫(kù)或框架多起來后,一個(gè)個(gè)從html里引入就不方便了,所有要借用node.js中的npm管理包的引入,是方便包管理。
使用Vue.js開發(fā)的前端項(xiàng)目如何部署?我們用到node.js中的程序打包工具比如webpack(node.js中的程序部署打包工具),可以直接require引入之后將不同模塊打包成單個(gè)js文件。同時(shí)這些工具提供各種自動(dòng)化處理,讓前端開發(fā)更爽。
Vue.js是數(shù)據(jù)驅(qū)動(dòng),和JQuery思路不同,你幾乎不需要自己進(jìn)行復(fù)雜低效的dom操作,開發(fā)簡(jiǎn)介明了。從這一點(diǎn)上說,可以基本拋棄JQuery了。
Vue.js開發(fā)有第三方支持的項(xiàng)目構(gòu)建工具,vue-cli腳手架
通過上面的分析,與其說是VUE需要借助NODE開發(fā)前端項(xiàng)目,不如換個(gè)思路,在NODE中集成VUE開發(fā)前端項(xiàng)目,所以,先安裝Node,使用Node的npm先安裝Vue,然后再安裝vue-cli腳手架,最后通過vue-cli腳手架構(gòu)建前端項(xiàng)目。
本項(xiàng)目結(jié)構(gòu)
?? 選題指導(dǎo), 項(xiàng)目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-420891.html
https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md文章來源地址http://www.zghlxwxcb.cn/news/detail-420891.html
最后
到了這里,關(guān)于【畢業(yè)設(shè)計(jì)】基于Django的在線考試系統(tǒng) python的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!