基于Web( Django)的学生信息管理系统(课设版)
以实战方式-零基础-Django入门
文章目录
前言
针对常州大学Python课程设计《基于Web( Django)的学生信息管理系统》这一选题,本章内容将介绍如何快速地基于Django框架搭建系统,以实战方式零基础入门django的简单项目。其他高校在校大学生也可参考开发自己的项目。
关于django的详细概念和更多功能和内容请查阅其他资料,本次课程设计的追求是简约、快速、高效。
课设版:不讲述项目完成后的服务器部署和上线,无需配置媒体文件,settings.py中DEBUG = True下运行项目,即本地测试网站。
项目源代码见文章尾部,关于网页的css、js、img文件见源代码,文章中不展示。
文章篇幅较大,不阐述代码细节,视图实现基于FBV。
课设内容要求
1.登录与注册
2.个人基本信息管理模块
3.日程安排模块: 添加某时间段要做的若干事情(标题,内容,开始\结束时间)
4.完成课程设计报告
项目流程图
一、走进Django
Django是一个开放源代码的Web应用框架,由Python写成。
Django采用了MTV的框架模式,即模型(Model)、模板(Template)和视图(View),三者之间各自负责不同的职责。
Django的主要目的是简便、快速地开发数据库驱动的网站。它强调代码复用,多个组件可以很方便地以插件的形式服务于整个框架。
二、创建项目
1.准备工作
PyCharm
Python3.5或以上版本
随后在CMD
pip install Django
其他下载方式自行查阅
在交互解释器下输入校验代码能够看到版本号,说明安装成功。
>>> import django
>>>> django.__version__
'3.0.8'
>>>
2.PyCharm创建项目
创建项目除了在命令提示符窗口创建项目之外,还可以在PyCharm中创建项目,本次介绍后者。
打开PyCharm并在左上方单击File->New Project,创建新项目,如图所示。
接着创建APP应用,可以在PyCharm的Terminal中输入创建指令。
完成项目和APP的创建后,启动项目。如果项目是由PyCharm创建的,就直接单击“运行”按钮启动项目。
测试成功,下面进入开发。
3.应用和模板配置
templates文件夹里新建index.html
文件
打开MyDjango003文件夹的配置文件settings.py
,找到配置属性INSTALLED_APPS和TEMPLATES,分别将项目应用user
和模板文件夹templates添加到相应的配置属性,其配置如下所示:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加项目应用user
'user'
]
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',
],
},
},
]
4.静态资源配置
在根目录文件夹中创建static静态资源文件夹。在配置文件settings.py中设置STATICFILES_DIRS属性。
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'), ]
设置settings.py中 STATIC_ROOT 如下:
STATIC_ROOT = os.path.join(BASE_DIR, 'AllStatic')
STATIC_ROOT 在DEBUG为False,即进入生产环境,在服务器上部署项目时才会用到。
5.数据库配置
项目创建时默认使用Sqlite3数据库,这是一款轻型数据库,常用于嵌入式系统开发,而且占用资源非常少。所以本次使用大家常用的MySQL数据库。
配置MySQL之前需要安装mysqlclient模块,CMD输入:
pip install mysqlclient
也可使用其他方式。完成mysqlclient模块的安装后,在项目的配置文件settings.py中配置MySQL数据库连接信息,代码如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django003_db',
'USER': 'root',
'PASSWORD': '010116',
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
为了验证数据库连接信息是否正确,我们使用数据库可视化工具 Navicat Preminum 打开本地的MySQL 数据库,在本地的MySQL数据库创建数据库django003_db,如图所示。
刚创建的数据库django003_db是一个空白的数据库,接着在PyCharm的Terminal界面下输入如下Django操作指令来创建Django内置功能的数据表。
python manage.py migrate
最后在Navicat Premium 里查看数据库 django003_db是否生成相应的数据表。
6.中间件配置
一般情况下,Django默认的中间件配置均可满足大部分的开发需求。我们在项目的 MIDDLEWARE 中添加 LocaleMiddleware 中间件,使得Django内置的功能支持中文显示,代码如下:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# 添加中间件 LocaleMiddleware
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
随意变更中间件顺序,很容易导致程序异常。
三、实现登录注册
Django内置了Auth认证系统。整个Auth认证系统可分为三大部分:用户信息、用户权限和用户组,在数据库中分别对应数据表auth_user
、auth_permission
和auth_group
。
使用内置的Auth认证系统实现用户注册、登录和注销功能,使我们无需自定义用户模型。
模型映射数据库中的一张表,django.contrib.auth.models.User
是django内置的用户模型,对应之前已经迁移完成的数据表auth_user
。
分别在 MyDjango003 的 urls.py
和 user 的urls.py
中定义路由信息。代码如下:
from django.contrib import admin
from django.urls import path, re_path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('user.urls', 'user'), namespace='user')),
#user 的 urls.py
from django.urls import path
from .views import *
urlpatterns = [
# 首页
path('', indexView, name='index'),
# 用户注册
path('register.html', registerView, name='register'),
# 用户登录
path('login.html', loginView, name='login'),
# 用户注销
path('logout.html', logoutView, name='logout'),
# 用户中心
path('info.html', infoView, name='info'),
]
项目应用user
的urls.py
中定义了5条路由信息,index路由为访问站点时展示的主页,register为用户注册操作,login为登录操作,logout为注销操作,info为登录后的个人中心展示。
然后在user
的views.py
中定义相关的视图函数,代码如下:
(这里我先导入所有需要用到的包、类、库、函数等,下文导包的代码将不再重复写入)
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.shortcuts import reverse
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.decorators import login_required
from user.form import ScheduleForm
from user.models import PersonInfo, Schedule
def indexView(request):
return render(request, 'index.html', locals())
# 使用表单实现用户注册
def registerView(request):
userLogin = False
if request.method == 'POST':
user = UserCreationForm(request.POST)
if user.is_valid():
user = user.save(commit=False)
user.email = request.POST.get('em')
user.save()
tips = '注册成功'
return redirect(reverse('user:login'))
else:
tips = '注册失败'
user = UserCreationForm()
return render(request, 'user.html', locals())
# 用户登录
def loginView(request):
tips = '请登录'
userLogin = True
if request.method == 'POST':
u = request.POST.get('username', '')
p = request.POST.get('password1', '')
if User.objects.filter(username=u):
user = authenticate(username=u, password=p)
if user:
if user.is_active:
# 登录当前账户
login(request, user)
return redirect(reverse('user:info'))
else:
tips = '账号密码错误,请重新输入'
else:
tips = '用户不存在,请注册'
user = UserCreationForm()
return render(request, 'user.html', locals())
# 退出登录
def logoutView(request):
logout(request)
return redirect(reverse('user:index'))
# 用户中心
# login_required 判断用户是否已登录
@login_required(login_url='/login.html')
def infoView(request):
return render(request, 'info.html', locals())
然后在templates新建模板文件user.html
、index.html
和info.html
并编写网页代码,模板文件user.html
主要生成用户注册和登录页面,模板文件info.html
生成用户中心页面(共用一个模板但路由不同),三者的代码如下:
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
{% load static %}
<link rel="stylesheet" href="{% static "css/common.css" %}">
<link rel="stylesheet" href="{% static "css/home.css" %}">
<title>student information system</title>
</head>
<body class="member">
<div class="mod_profile js_user_data">
<div class="section_inner">
<h1 class="profile__tit">
<span class="profile__name" style="font-family: 幼圆">欢迎进入学生信息管理系统</span>
</h1>
</div>
</div>
<div style="height: 330px;">
<div style="text-align: center;">
<a href="{% url 'user:info' %}" ><button type="button" style="margin-top:30px;height:30px;width: 200px;background-color:aliceblue;border:1px silver solid;">开始</button></a>
<br />
<a href="{% url 'user:login' %}" ><button type="button" style="margin-top:30px;height:30px;width: 200px;background-color:aliceblue;border:1px silver solid;" name="b1" value="1">登录</button></a>
<br />
<a href="{% url 'user:register' %}" ><button type="button" style="margin-top:30px;height:30px;width: 200px;background-color:aliceblue;border:1px silver solid;">注册</button></a>
<br />
</div>
</div>
</body>
</html>
user.html
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>用户管理</title>
<link rel="stylesheet" href="https://unpkg.com/mobi.css/dist/mobi.min.css">
</head>
<body>
<div class="flex-center">
<div class="container">
<div class="flex-center">
<div class="unit-1-2 unit-1-on-mobile">
{% if userLogin %}
<h1>用户登录</h1>
{% else %}
<h1>用户注册</h1>
{% endif %}
{% if tips %}
<div>{
{ tips }}</div>
{% endif %}
<form class="form" action="" method="post">
{% csrf_token %}
<div>