今回は、Djangoフレームワークによるデータ設計、データベース構築を完了し、Djangoフレームワークパターンを利用して学生情報管理システムの機能を実装しました。
単純なパッケージでインストールするのは問題ありません。
この記事では、Python、Mysql、および Pycharm のインストールについては特に説明しません。必要な学生は、次のブログ投稿を参照してください。
システムの最終的な機能構造は次のとおりです。
ソースコードのダウンロードは以下の通りです。
[Python+Django]Web学生情報管理システム卒業プロジェクトデータベースとシステム実装ソースコード - Pythonドキュメントリソース - CSDNライブラリhttps://download.csdn.net/download/agelee/87384620
システムコードファイル構造:
各モジュールのシステム動作デモ:
大学経営
専門的な管理:
クラス管理:
学生管理
教師の管理
スコア管理:
データベース設計:
本システムはシステム解析に基づいて以下の7つのデータテーブルを設計します。
システムコードの実装
実装する必要のある機能モジュールを大まかに明確にした後、コーディングを開始します
1. 開発環境構築と技術選定
サーバー: Python 3.9
Web フレームワーク: Django 4.1.3
データベース: MySQL mysql-8.0.13-winx64
開発ツールIDE: Pycharm
フロントエンドフレームワーク: Bootstrap 4
2. Djangoプロジェクトの作成とデータベース接続設定
1. 任意のドライブ文字フォルダーの下に、次のような新しい空の Pycharm プロジェクト フォルダーを作成します。
2. Pycharm を開き、空のフォルダー PycharmProjects を入力します。
3. Pycharm の Windows コマンド ライン入力インターフェイスから Django プロジェクトを作成するコマンドを入力して、新しいプロジェクトを作成します: DjangoSms
django-admin startproject DjangoSms
3. データベースの作成と接続の構成
Django は、PostgreSQL、MySQL、SQLite、Oracle などのさまざまなデータベースを適切にサポートします。
Django は、これらのデータベースに統合された呼び出し API を提供します。
ビジネス ニーズに応じて、さまざまなデータベースを選択できます。
MySQL は、Web アプリケーションで最も一般的に使用されるデータベースです。
この記事では MySQL を使用します。
- データベースの作成
Django はデータ テーブル レベルでのみ操作でき、データベース レベルでは操作できないため、データベースを手動で作成する必要があります: djangosms
コマンドラインからデータベースを作成できます。
1. mysql インストール フォルダーの bin サブフォルダー ディレクトリを入力します。
例: D:\Program Files\mysql-8.0.13-winx64\bin
2. データベースに接続します。
mysql -u root -p Enter password:******
3. 接続とログインに成功したら、djangosms コマンドを使用してデータベースを作成します。
CREATE DATABASE IF NOT EXISTS djangosms DEFAULT CHARSET utf8;
または、SQLlog ツール djangosms を使用してデータベースを作成します。
- Django データベース接続構成
Django では MySQL を使用するために mysql ドライバーが必要です。mysql ドライバーがインストールされていない場合は、次のコマンドを実行してインストールできます。
pip install pymysql
インストール後、DjangoSms プロジェクトの下の DjangoSms フォルダーに入り、setting.py ファイルを開き、DATABASES 構成項目を見つけて、DATABSES 構成項目を次のように変更します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'djangosms', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
次に、pymysql モジュールを使用して mysql データベースに接続します。
モジュールを導入し、settings.py と同じディレクトリにある __init__.py で構成します。
import pymysql
pymysql.install_as_MySQLdb()
この時点で、その後のシステム開発をプログラミングするための Django プロジェクト DjangoSms を作成しました。
同時に、このプロジェクト用に MySQL データベースが作成されました。これは、プログラム開発プロセス中のデータ保存と処理用の djangosms です。
3 機能モジュールの詳細な開発
Django プロジェクト フレームワークが構築された後、システムのフロントエンドとバックエンドのすべてのプログラム開発をこのプロジェクトで実行できます。典型的な Django プロジェクト モジュール関数の開発には、次の手順が含まれます。
- アプリの作成と登録
- モデルの定義
- ビュー関数を定義する
- アクセスルートURLの設定
- 静的リソースの準備と構成
- フロントエンドテンプレートの開発
- テストと実行
1.アプリの作成
Django のアプリは機能モジュールを表します。
通常、実際の開発では機能モジュールの管理を容易にするために別のアプリを作成する必要がありますが、当社では迅速な開発を実現するために、すべての機能とモデルを1つのアプリで管理します。
コマンド ラインに python manage.py startapp app01 コマンドを入力して、app01 という名前のアプリを作成します。
python manage.py startapp app01
次のように、DjangoSms フォルダー ディレクトリの settings.py で INSTALLED_APPS 構成アイテムを見つけ、新しく作成した app01 をプロジェクトのアプリ リストに追加します。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01' #添加此项
]
2. モデルを定義する
Django はモデルを使用して、プログラム内のフィールドをデータベースにマップし、プログラムとデータの間でデータを渡します。
Django モデルは組み込みの ORM を使用します。
以前に空のデータベース djangoesms を作成しましたが、このステップでは Django モデルを使用してデータベース テーブルの作成を完了します。
Django にはモデルとターゲット データベースの間に独自のマッピング ルールがあるため、データベースにデータ テーブルを自分で作成すると、必ずしも Django のテーブル作成ルールに準拠するとは限らず、その結果、モデルとターゲットの間の通信を確立できなくなる可能性があります。データベース。
したがって、Django プロジェクトの Django モデルを通じて対応するデータベース テーブルを作成するのが最善です。
1 つのテーブルが 1 つのモデルに対応します。このステップでは、以前のデータベース設計のニーズに従って 7 つのモデルを設計します。
DjangoSms/app01/models.py を開き、7 つのモデルを作成します。
from django.db import models
# Create your models here.
# 学院表
class Academy(models.Model):
id = models.AutoField('序号',primary_key=True)
name = models.CharField('学院',max_length=20)
# 修改显示的表的名字
class Meta:
verbose_name = '学院'
verbose_name_plural = '学院'
def __str__(self):
return self.name
# 专业表
class Major(models.Model):
id = models.AutoField('序号',primary_key=True)
academy = models.ForeignKey(to=Academy,on_delete=models.CASCADE,verbose_name='学院')
name = models.CharField('专业',max_length=30)
# 修改显示的表的名字
class Meta:
verbose_name = '专业'
verbose_name_plural = '专业'
def __str__(self):
return self.name
# 课程表
class Course(models.Model):
id = models.AutoField('序号',primary_key=True)
name = models.CharField('课程名称',max_length=30)
subject = models.CharField('学科',max_length=30)
class Meta:
verbose_name = '课程'
verbose_name_plural = '课程'
def __str__(self):
return self.name
# 班级表
class Classx(models.Model):
id = models.AutoField('序号',primary_key=True)
major = models.ForeignKey(Major,on_delete=models.CASCADE,verbose_name='专业')
name = models.CharField('名称',max_length=30)
# 修改显示的表的名字
class Meta:
verbose_name = '专业'
verbose_name_plural = '专业'
def __str__(self):
return self.name
# 学生表
class Student(models.Model):
id = models.AutoField('序号',primary_key=True)
sid = models.CharField('学号',max_length=12)
name = models.CharField('姓名',max_length=20,unique=True)
sex = models.BooleanField('性别',choices=((0,'女'),(1,'男')))
age = models.IntegerField('年龄')
sclass = models.ForeignKey(Classx,on_delete=models.CASCADE,verbose_name='班级')
email = models.EmailField('邮箱',default=None) # 默认为空 唯一值
pwd = models.CharField('密码',max_length=20)
# 修改显示的表的名字
class Meta:
verbose_name = '学生'
verbose_name_plural = '学生信息表'
def __str__(self):
return self.name
# 教师表
class Teacher(models.Model):
tid = models.AutoField('教师编号',primary_key=True)
name = models.CharField('姓名',max_length=20,unique=True)
sex = models.BooleanField('性别',choices=((0,'女'),(1,'男')))
age = models.IntegerField('年龄')
academy = models.ForeignKey(Academy,on_delete=models.CASCADE,verbose_name='学院')
email = models.EmailField('邮箱',default=None) # 默认为空 唯一值
phone = models.CharField('联系方式',max_length=20,default=None)
pwd = models.CharField('密码',max_length=20)
# 修改显示的表的名字
class Meta:
verbose_name = '教师'
verbose_name_plural = '教师信息表'
def __str__(self):
return self.name
# # 学生成绩表
class Record(models.Model):
id = models.AutoField('序号',primary_key=True)
sid = models.ForeignKey(Student,on_delete=models.CASCADE,verbose_name='学号')
tid = models.ForeignKey(Teacher,on_delete=models.CASCADE,verbose_name='任课老师')
course = models.ForeignKey(Course,on_delete=models.CASCADE,verbose_name='考试科目')
grade = models.FloatField('成绩')
rtime = models.DateField('考试时间',blank=True,null=True)
year = models.CharField('学年',max_length=4)
term = models.CharField('学期',max_length=4,choices=(('上','上'),('下','下')))
class Meta:
verbose_name = '学生成绩'
verbose_name_plural = '学生成绩'
def __str__(self):
return self.term
3. ビュー関数を定義する
Django におけるビューの概念は、「同じ機能とテンプレートを備えた Web ページの集合」です。
たとえば、学生情報システムでは、次のビューが必要になる場合があります。
- ログイン:ユーザーとパスワードを入力し、検証結果に基づいてログイン処理を行います。
- 大学情報の追加、削除、変更、確認ができます。
- 生徒のスコアを追加、削除、変更、確認します。
これらの要件は View によって満たされます。
各ビューは単純な Python 関数として動作します。必要なことは 2 つだけです。要求されたページのコンテンツを含む HttpResponse オブジェクトを返すか、Http404 などの例外をスローします。
view 関数のリクエストは、Web ページによって送信されるリクエストに関連しており、取得または投稿の内容、ユーザーのブラウザ、システム、その他の情報が含まれます。
たとえば、最初に大学を追加、削除、変更、確認するためのビューをいくつか作成します。
ファイル DjangoSms/app01/views.py で、次のようにビュー関数を作成します。
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
# 学院管理
def academy_list(request):
academy = models.Academy.objects.all()
return render(request, 'academy_list.html', {'academy_list': academy})
def edit_academy(request):
if request.method == 'POST':
edit_id = request.GET.get('id')
edit_obj = models.Academy.objects.get(id=edit_id)
new_name = request.POST.get('edit_name')
edit_obj.name = new_name
edit_obj.save()
return redirect('/academy_list/')
edit_id = request.GET.get('id')
edit_obj = models.Academy.objects.get(id=edit_id)
return render(request, 'academy_edit.html', {'academy': edit_obj})
def add_academy(request):
if request.method == 'POST':
new_academy_name = request.POST.get('name')
models.Academy.objects.create(name=new_academy_name)
return redirect('/academy_list/')
return render(request, 'academy_add.html')
def drop_academy(request):
drop_id = request.GET.get('id')
drop_obj = models.Academy.objects.get(id=drop_id)
drop_obj.delete()
return redirect('/academy_list/')
4. アクセスルーティングURLの設定
ビューを取得したら、ビュー関数を Web ページのリンクにマップする必要があります。
URL は、Web サイトにアクセスするときに入力された URL リンクとして理解できます。URL を構成した後でのみ、Django はアプリを見つける方法を認識します。
DjangoSms/urls.py を開き、次のコードを入力します。
from django.contrib import admin
from django.urls import path , re_path
from app01 import views
urlpatterns = [
re_path(r'^$', views.academy_list),
re_path(r'^edit_academy', views.edit_academy),
re_path(r'^academy_list', views.academy_list),
re_path(r'^add_academy', views.add_academy),
re_path(r'^drop_academy', views.drop_academy),
]
上記の URL を構成すると、Django はユーザーが要求した URL に基づいて使用するビューを選択します。
5. 静的リソースの準備と構成
このシステムはフロントエンドとバックエンドが分離されておらず、フロントエンドフレームワークは現在普及しているBootstrapを使用していますデザイン、表示、開発効率のパーソナライズに応えるため、この記事では部分的にカスタマイズされた一連のテーマを採用していますBootstrap に基づいたテンプレート。
プロジェクトのルート ディレクトリに新しいフォルダー static を作成し、フロントエンド テンプレートの静的リソースを保存します。
用意したファイルを静的フォルダーにコピーします
静的リソースを準備した後、テンプレート内で静的ファイルを正しく参照できるように、Django で静的ファイルの保存場所を指定する必要もあります。
DjangoSms/settings.py で次のように設定します。
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 添加此项
]
6. テンプレートの開発と作成
テンプレートを作成する前に、すべてのテンプレート ファイルを保存するための新しいフォルダー テンプレートをルート ディレクトリに作成します。
テンプレートの保存場所を指定するには、テンプレートの場所も構成する必要があります。DjangoSms/settings.py で次のように構成します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 添加此项
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
次に、テンプレート ファイルに 3 つの新しいファイルを作成します。
- base.html: プロジェクト全体のテンプレート ベースであり、すべての Web ページはそこから継承します。
- header.html: Web ページの上部にあるナビゲーション バーです。
- footer.html: Web ページの下部にある脚注です。
上記3つのファイルはWebサイトのページに共通の構成モジュールで、基本的に各ページは変わらないので分けています。
Django の後続のページ テンプレートを作成するときは、対応する共通テンプレート コンポーネントを直接継承できます。
3 つの静的 HTML ファイルのコードをそれぞれ次のように記述します。
テンプレート/base.html:
<!-- 载入静态文件-->
{% load static %}
<!-- 网站主语言 -->
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- jQuery UI -->
<link href="https://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" rel="stylesheet" media="screen">
<!-- Bootstrap -->
<link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- styles -->
<link href="/static/css/styles.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- 引入导航栏 -->
{% include 'header.html' %}
<!-- 预留具体页面的位置 -->
{% block content %}{% endblock content %}
<!-- 引入注脚 -->
{% include 'footer.html' %}
<!-- bootstrap.js 依赖 jquery.js 和popper.js,因此在这里引入 -->
<!--<script src="{% static 'jquery/jquery-3.6.0.js' %}"></script>-->
<!--<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>-->
<!--
popper.js 采用 cdn 远程引入,意思是你不需要把它下载到本地。
在实际的开发中推荐静态文件尽量都使用 cdn 的形式。
教程采用本地引入是为了让读者了解静态文件本地部署的流程。
-->
<link href="/static/vendors/datatables/dataTables.bootstrap.css" rel="stylesheet" media="screen">
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery.js"></script>
<!-- jQuery UI -->
<script src="https://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
<script src="/static/vendors/datatables/js/jquery.dataTables.min.js"></script>
<script src="/static/vendors/datatables/dataTables.bootstrap.js"></script>
<script src="/static/js/custom.js"></script>
<script src="/static/js/tables.js"></script>
<!-- bootstrap-datetimepicker -->
<link href="/static/vendors/bootstrap-datetimepicker/datetimepicker.css" rel="stylesheet">
<script src="/static/vendors/bootstrap-datetimepicker/bootstrap-datetimepicker.js"></script>
</body>
</html>
テンプレート/header.html:
<div class="header">
<div class="container">
<div class="row">
<div class="col-md-5">
<!-- Logo -->
<div class="logo">
<h1><a href="/">学生信息管理系统</a></h1>
</div>
</div>
<div class="col-md-5">
<div class="row">
<div class="col-lg-12">
<div class="input-group form">
<input type="text" class="form-control" placeholder="Search...">
<span class="input-group-btn">
<button class="btn btn-primary" type="button">搜索</button>
</span>
</div>
</div>
</div>
</div>
<div class="col-md-2">
<div class="navbar navbar-inverse" role="banner">
<nav class="collapse navbar-collapse bs-navbar-collapse navbar-right" role="navigation">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">个人中心<b class="caret"></b></a>
<ul class="dropdown-menu animated fadeInUp">
<li><a href="/login">Logout</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
テンプレート/フッター.html:
{% load static %}
<!-- Footer -->
<div>
<br><br><br>
</div>
<footer class="py-3 bg-dark fixed-bottom">
<div class="container">
<p class="m-0 text-center text-white">Copyright © DjangoSms 2022</p>
</div>
</footer>
次に、各ビュー機能に対応したWebページテンプレートを詳細に実装していきます。
アカデミーの追加: academy_add.html
<!-- extends表明此页面继承自 base.html 文件 -->
{% extends "base.html" %} {% load static %}
<!-- 写入 base.html 中定义的 title -->
{% block title %} 学院列表 {% endblock title %}
<!-- 写入 base.html 中定义的 content -->
{% block content %}
<div class="page-content">
<div class="row">
<div class="col-md-2">
<div class="sidebar content-box" style="display: block;">
<ul class="nav">
<!-- Main menu -->
<li class="current"><a href="/academy_list"><i class="glyphicon glyphicon-home"></i>学院管理</a></li>
<li ><a href="/major_list"><i class="glyphicon glyphicon-list"></i> 专业管理</a></li>
<li><a href="/class_list"><i class="glyphicon glyphicon-tag"></i> 班级管理</a></li>
<li><a href="/course_list"><i class="glyphicon glyphicon-file"></i>课程管理</a></li>
<li><a href="/student_list"><i class="glyphicon glyphicon-user"></i>学生管理</a></li>
<li><a href="/teacher_list"><i class="glyphicon glyphicon-pencil"></i>教师管理</a></li>
<li><a href="/record_list"><i class="glyphicon glyphicon-th-list"></i>学生成绩管理</a></li>
<li class="submenu">
<a href="#">
<i class="glyphicon glyphicon-cog"></i> 系统设置
<span class="caret pull-right"></span>
</a>
<!-- Sub menu -->
<ul>
<li><a href="/login">Login</a></li>
<li><a href="/signup">Signup</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="col-md-10">
<div class="content-box-large">
<div class="panel-heading">
<div class="panel-title">新增学院</div>
</div>
<div class="panel-body">
<form class="form-horizontal" role="form" action="/add_academy/" method="post">
{% csrf_token %}
<div class="form-group">
<label for="input1" class="col-sm-2 control-label">学院名称</label>
<div class="col-sm-10">
<input class="form-control" id="input1" placeholder="学院名称" name="name">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">保存</button>
<button type="submit" formmethod="get" formaction="/academy_list" class="btn btn-default">返回</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
アカデミー編集者: academy_edit.html
<!-- extends表明此页面继承自 base.html 文件 -->
{% extends "base.html" %} {% load static %}
<!-- 写入 base.html 中定义的 title -->
{% block title %} 学院列表 {% endblock title %}
<!-- 写入 base.html 中定义的 content -->
{% block content %}
<div class="page-content">
<div class="row">
<div class="col-md-2">
<div class="sidebar content-box" style="display: block;">
<ul class="nav">
<!-- Main menu -->
<li class="current"><a href="/academy_list"><i class="glyphicon glyphicon-home"></i>学院管理</a></li>
<li ><a href="/major_list"><i class="glyphicon glyphicon-list"></i> 专业管理</a></li>
<li><a href="/class_list"><i class="glyphicon glyphicon-tag"></i> 班级管理</a></li>
<li><a href="/course_list"><i class="glyphicon glyphicon-file"></i>课程管理</a></li>
<li><a href="/student_list"><i class="glyphicon glyphicon-user"></i>学生管理</a></li>
<li><a href="/teacher_list"><i class="glyphicon glyphicon-pencil"></i>教师管理</a></li>
<li><a href="/record_list"><i class="glyphicon glyphicon-th-list"></i>学生成绩管理</a></li>
<li class="submenu">
<a href="#">
<i class="glyphicon glyphicon-cog"></i> 系统设置
<span class="caret pull-right"></span>
</a>
<!-- Sub menu -->
<ul>
<li><a href="/login">Login</a></li>
<li><a href="/signup">Signup</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="col-md-10">
<div class="content-box-large">
<div class="panel-heading">
<div class="panel-title">编辑学院</div>
</div>
<div class="panel-body">
<form class="form-horizontal" role="form" action="/edit_academy/?id={
{ academy.id }}" method="post">
{% csrf_token %}
{#<input type="text" name="edit_id" value="{
{ academy.id }}" class="hide">#}
<div class="form-group">
<label for="input1" class="col-sm-2 control-label">学院名称</label>
<div class="col-sm-10">
<input class="form-control" id="input1" placeholder="姓名" name="edit_name" value="{
{ academy.name }}">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">保存</button>
<button type="submit" formmethod="get" formaction="/academy_list/" class="btn btn-default">返回</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
アカデミーリスト: academy_list.html
<!-- extends表明此页面继承自 base.html 文件 -->
{% extends "base.html" %} {% load static %}
<!-- 写入 base.html 中定义的 title -->
{% block title %} 学院列表 {% endblock title %}
<!-- 写入 base.html 中定义的 content -->
{% block content %}
<div class="page-content">
<div class="row">
<div class="col-md-2">
<div class="sidebar content-box" style="display: block;">
<ul class="nav">
<!-- Main menu -->
<li class="current"><a href="/academy_list"><i class="glyphicon glyphicon-home"></i>学院管理</a></li>
<li ><a href="/major_list"><i class="glyphicon glyphicon-list"></i> 专业管理</a></li>
<li><a href="/class_list"><i class="glyphicon glyphicon-tag"></i> 班级管理</a></li>
<li><a href="/course_list"><i class="glyphicon glyphicon-file"></i>课程管理</a></li>
<li><a href="/student_list"><i class="glyphicon glyphicon-user"></i>学生管理</a></li>
<li><a href="/teacher_list"><i class="glyphicon glyphicon-pencil"></i>教师管理</a></li>
<li><a href="/record_list"><i class="glyphicon glyphicon-th-list"></i>学生成绩管理</a></li>
<li class="submenu">
<a href="#">
<i class="glyphicon glyphicon-cog"></i> 系统设置
<span class="caret pull-right"></span>
</a>
<!-- Sub menu -->
<ul>
<li><a href="/login">Login</a></li>
<li><a href="/signup">Signup</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="col-md-10">
<div class="content-box-large">
<div class="panel-heading">
<div class="panel-title">学院列表</div>
</div>
<div class="col-md-3 col-sm-6 pull-right add-btn">
<a href="/add_academy/" class="btn btn-info pull-right">新增
</a>
</div>
<div class="panel-body">
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered" id="example">
<thead>
<tr>
<th>序号</th>
<th>学院名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for academy in academy_list %}
<tr>
<td>{
{ forloop.counter }}</td>
<td>{
{ academy.name }}</td>
<td class="text-center">
<a class="btn btn-info btn-sm" href="/edit_academy/?id={
{ academy.id }}"><i
class="fa fa-pencil fa-fw"
aria-hidden="true"></i>编辑
</a>
<a class="btn btn-danger btn-sm" href="/drop_academy/?id={
{ academy.id }}"><i
class="fa fa-trash-o fa-fw"
aria-hidden="true"></i>删除
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
7. テストと実行
これまでに、ビュー関数を管理するために、Django プロジェクト フォルダー DjangoSms の下にアプリ app01 を作成しました。
同時に、データは URL を通じてビューと Web ページの間で関連付けられて表示されます。
Windows コマンドラインに次のように入力します。
python manage.py runserver
サーバーを実行した後、ブラウザーで前に構成したホームページに対応する URL アドレスを入力します。
http://127.0.0.1:8000/
ホームページは次のように表示されます。