簡(jiǎn)易版django實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

該項(xiàng)目的思路是利用將django的超級(jí)管理員登錄頁(yè)面改造成學(xué)生信息管理系統(tǒng)网持,因此沒有用到views.py和模板,該項(xiàng)目的文件結(jié)構(gòu)如下

- django-admin-demo    # 項(xiàng)目所在文件夾祠饺,里面存放該項(xiàng)目需要的三方庫(kù)和項(xiàng)目
  - django_demo            # django項(xiàng)目所在文件夾诅岩,文件夾名隨便起声离,使用該命令創(chuàng)建 django-admin startproject django_demo
    - django_demo          # 這是一個(gè)python包章办,內(nèi)部所有文件都是上面命令創(chuàng)建出來(lái)的锉走,該包與前一個(gè)文件夾同名
      - _init_.py                # 申明包
      - asgi.py                  # 作為你的項(xiàng)?的運(yùn)?在 ASGI 兼容的 Web 服務(wù)器上的入口。使? ASGI 來(lái)部署的時(shí)候使?藕届。
      - settings.py            # Django 項(xiàng)?的配置?件挪蹭。
      - urls.py                  # Django 項(xiàng)?的 URL 聲明,就像你?站的“?錄”休偶。
      - wsgl.py                #  作為你的項(xiàng)?的運(yùn)?在 WSGI 兼容的Web服務(wù)器上的入口嚣潜。使?使? WSGI 進(jìn)?部署的時(shí)候使?。 
    - student.py             # 使用 python manage.py startapp student ,生成一個(gè)student應(yīng)用
      - migrations           # 一個(gè)python包椅贱,目前發(fā)現(xiàn)時(shí)存放數(shù)據(jù)庫(kù)相關(guān)內(nèi)容
      - __init__.py          # 申明是個(gè)包
      - admin.py             # 自定義Django管理工具
      - apps.py               # Django應(yīng)用的配置文件
      - models.py           # 模型管理文件
      - tests.py               # 測(cè)試文件
      - views.py              # 視圖管理文件
    - manage.py             #  ?個(gè)讓你?各種?式管理 Django 項(xiàng)?的命令??具
  - venv                         # 虛擬環(huán)境文件
  - requirements.txt       # 管理三方庫(kù)文件

初始化應(yīng)用與數(shù)據(jù)庫(kù)

首先新建一個(gè)python項(xiàng)目django-admin-demo,在該目錄下創(chuàng)建一個(gè)requirements.txt只冻,內(nèi)容如下:

# 所需要的依賴
# web框架
django==3.2.4
django-bootstrap4==3.0.1
django-simpleui==2021.6.2
# 專門解決 多層嵌套頁(yè)面展示問(wèn)題
django-nested_admin==3.3.3
# 數(shù)據(jù)庫(kù)操作
pymysql==1.0.2
mysqlclient
sqlalchemy==1.4.18
# yaml文件操作
PyYaml

創(chuàng)建好后在pycharm中打開該文件庇麦,點(diǎn)擊pycharm上的按鈕下載所需三方庫(kù)


image.png

接下來(lái)在cmd窗口或pycharm的Teminal窗口中執(zhí)行下列操作。

  1. 構(gòu)建django項(xiàng)目
django-admin startproject django_demo
  1. 生成應(yīng)用
cd django_demo
python manage.py startapp student
  1. 在項(xiàng)目中注冊(cè)應(yīng)用喜德,打開項(xiàng)目包文件中的setting.py文件山橄,在INSTALLED_APPS列表中添加如下信息
INSTALLED_APPS = [
    'student',
    'simpleui',
    'nested_admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles'
]
image.png
  1. 初始化數(shù)據(jù)庫(kù),這里django默認(rèn)使用的是sqlite3,我改為了mysql舍悯,將項(xiàng)目包中setting.py文件內(nèi)的DATABASES內(nèi)容改為
DATABASES = {     # 這里使用mysql數(shù)據(jù)庫(kù)航棱,首先得連接,然后新建一個(gè)名為django-demo的schema
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django-demo',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
image.png

這里需要注意下萌衬,首先得創(chuàng)建好django-demo這個(gè)數(shù)據(jù)庫(kù)才能進(jìn)行下列操作

python manage.py migrate            # 同步數(shù)據(jù)庫(kù)內(nèi)容/創(chuàng)建
python manage.py makemigrations      # 構(gòu)建數(shù)據(jù)更新內(nèi)容

定義模型

models.py文件內(nèi)容如下

from django.db import models

# Create your models here.
from django.utils.html import format_html    # 個(gè)人理解就是將format_html后跟的字符串以HTML輸出


class Student(models.Model):
    """
    學(xué)員信息 [表定義饮醇,相關(guān)一些操作]
    """
    studentName = models.CharField('學(xué)員姓名', max_length=255)
    studentAge = models.IntegerField('學(xué)員年齡', null=True, blank=True)

    class Meta:    # 這里是Django的用法,給model定義元數(shù)據(jù)
        verbose_name = '學(xué)員信息管理'  # 給模型類起個(gè)別名
        verbose_name_plural = '學(xué)員信息管理'  # 指定模型的復(fù)數(shù)形式是什么

    # 行級(jí)按鈕/操作定義 -- 處理一條記錄
    def alert(self):
        # 此處你想展示什么秕豫,就寫什么html代碼
        btn = '<input type="button" value="點(diǎn)我彈出" onclick="javascript:alert(\''+self.studentName+'\');"/>'
        # 返回一個(gè)html信息對(duì)象
        return format_html(btn)

    alert.short_description='操作'


    def __str__(self):   # 類中如果定義了__str__方法朴艰,print打印對(duì)象時(shí)就會(huì)輸出這個(gè)函數(shù)返回的字符串
        return self.studentName


class Contact(models.Model):
    """
    聯(lián)系方式表,和學(xué)生有關(guān)聯(lián)
    """
    info = models.CharField('聯(lián)系方式', max_length=16)
    Student = models.ForeignKey("Student", on_delete=models.CASCADE, verbose_name="學(xué)生信息")

    class Meta:
        verbose_name = '聯(lián)系方式'
        verbose_name_plural = '聯(lián)系方式列表' # 復(fù)數(shù) -- 展示多個(gè)的時(shí)候

    def __str__(self):  # 類中如果定義了__str__方法混移,print打印對(duì)象時(shí)就會(huì)輸出這個(gè)函數(shù)返回的字符串
        return ''


class ExamInfo(models.Model):
    """
    考試信息表
    """
    score = models.IntegerField('考試總分')
    remark = models.CharField('備注', max_length=16)
    Student = models.ForeignKey("Student", on_delete=models.CASCADE, verbose_name="學(xué)生信息")

    class Meta:
        verbose_name = '考試信息'
        verbose_name_plural = '考試信息列表' # 復(fù)數(shù) -- 展示多個(gè)的時(shí)候

    def __str__(self):
        return ''


class ExamDetailInfo(models.Model):
    """
    考試信息詳情表
    """
    score = models.IntegerField('分?jǐn)?shù)')
    className = models.CharField('科目', max_length=16)
    ExamInfo = models.ForeignKey("ExamInfo", on_delete=models.CASCADE, verbose_name="考試記錄")

    class Meta:
        verbose_name = '考試詳情'
        verbose_name_plural = '考試詳情' # 復(fù)數(shù) -- 展示多個(gè)的時(shí)候

    def __str__(self):
        return ''

在models.py中設(shè)計(jì)了Student祠墅、Contact、Examinfo歌径、ExamDetailInfo四張表毁嗦,其中Contact和ExamInfo的student字段為Student表的外鍵,ExamDetailInfo的ExamInfo字段是ExamInfo表的外鍵回铛,在Student表中添加了alert按鍵狗准,點(diǎn)擊后展示學(xué)生名克锣。

定義后臺(tái)文件

在admin.py文件中寫入如下

import nested_admin
from django.contrib import admin

# Register your models here.
from .models import Student, Contact, ExamInfo, ExamDetailInfo


# TabularInline 表格形式的展示,一行一行
class ContactAdmin(nested_admin.NestedTabularInline):  # 聯(lián)系方式
    # 指定要展示哪些內(nèi)容
    list_display = ['id', 'info']
    model = Contact
    extra = 0  # 表格默認(rèn)展示幾行


class ExamDetailInfoAdmin(nested_admin.NestedTabularInline):   # 考試詳情
    model = ExamDetailInfo
    extra = 0  # 表格默認(rèn)展示幾行


# NestedStackedInline 【上下排版】
class ExamInfoAdmin(nested_admin.NestedStackedInline):      # 考試信息
    model = ExamInfo
    extra = 0  # 表格默認(rèn)展示幾行
    inlines = [ExamDetailInfoAdmin]


# ModelAdmin 常規(guī)展示【上下排版】
class StudentAdmin(nested_admin.NestedModelAdmin):     # 學(xué)員信息管理
    """
    學(xué)員信息
    """
    # 指定要展示哪些內(nèi)容
    list_display = ['id', 'studentName', 'studentAge', 'alert']
    model = Student
    inlines = [ContactAdmin, ExamInfoAdmin] #-- 嵌套一個(gè) 聯(lián)系方式的維護(hù)頁(yè)面

    actions = ['test_btn']  # 按鈕定義

    @admin.action(permissions=['change'])  # 權(quán)限定義
    def test_btn(self, httprequest, queryset):
        # 此處可以進(jìn)行數(shù)據(jù)庫(kù)操作等等...
        print('請(qǐng)求信息:', httprequest)
        print('頁(yè)面選擇的數(shù)據(jù)信息:', queryset)
        self.message_user(httprequest, '執(zhí)行成功')  # 彈出一個(gè)對(duì)話框給前端提示

    test_btn.short_description = '執(zhí)行測(cè)試用例'
    test_btn.confirm = '這是一個(gè)對(duì)話框驶俊,你確定要執(zhí)行這個(gè)按鈕的動(dòng)作嘛娶耍?'

admin.site.register(Student, StudentAdmin)
# admin.site.register(Contact, ContactAdmin) # 此頁(yè)面已經(jīng)被嵌套在學(xué)生信息界面,不需要獨(dú)立成為一個(gè)頁(yè)面了

在admin.py文件中對(duì)剛創(chuàng)建models.py中的表進(jìn)行自定義管理饼酿,一般表其對(duì)應(yīng)的自定義樣式的類命名為表名+Admin榕酒, list_display屬性可以指定該頁(yè)面的顯示,inlines可以指定某些信息在該表所在頁(yè)面內(nèi)部顯示

創(chuàng)建超級(jí)用戶

在cmd窗口或pycharm的teminal窗口中進(jìn)入到django_demo目錄中故俐,輸入

python manage.py createsuperuser

然后依次輸入用戶名想鹰、郵箱(可不填直接回車)、密碼药版、確定密碼辑舷,最后輸入y設(shè)置完畢,然后啟動(dòng)服務(wù)

python manage.py runserver

image.png

在瀏覽器中打開http://127.0.0.1:8000/admin/ ,得到界面
image.png

輸入剛剛設(shè)置好的用戶名和密碼槽片,登錄
image.png

界面目前還有英文何缓,因此在settings.py中LANGUAGE_CODE和TIME_ZONE字段的值改為

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

重新刷新界面,語(yǔ)言已設(shè)置為中文还栓,


image.png

image.png

這樣基本功能就完成了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碌廓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剩盒,更是在濱河造成了極大的恐慌谷婆,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辽聊,死亡現(xiàn)場(chǎng)離奇詭異纪挎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)跟匆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門异袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贾铝,你說(shuō)我怎么就攤上這事隙轻。” “怎么了垢揩?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵玖绿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叁巨,道長(zhǎng)斑匪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蚀瘸,結(jié)果婚禮上狡蝶,老公的妹妹穿的比我還像新娘。我一直安慰自己贮勃,他們只是感情好贪惹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寂嘉,像睡著了一般奏瞬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泉孩,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天硼端,我揣著相機(jī)與錄音,去河邊找鬼寓搬。 笑死珍昨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的句喷。 我是一名探鬼主播镣典,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唾琼!你這毒婦竟也來(lái)了骆撇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤父叙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肴裙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾唱,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蜻懦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甜癞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宛乃,死狀恐怖悠咱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情征炼,我是刑警寧澤析既,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站谆奥,受9級(jí)特大地震影響眼坏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酸些,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一宰译、第九天 我趴在偏房一處隱蔽的房頂上張望檐蚜。 院中可真熱鬧,春花似錦沿侈、人聲如沸闯第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咳短。三九已至,卻和暖如春智厌,著一層夾襖步出監(jiān)牢的瞬間诲泌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工铣鹏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敷扫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓诚卸,卻偏偏與公主長(zhǎng)得像葵第,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子合溺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容