Django实现学员管理系统

本文实例为大家分享了Django实现学员管理系统的具体代码,供大家参考,具体内容如下

要求:实现数据的增删改查功能,并同步至数据库中。此项目实现了前端以及后端的结合。

(1) 先在settings里配置static(存放的是css样式、js代码、以及imgs),可以加在文件末尾

STATIC_URL = '/static/'
STATICFILES_DIRS = [
 os.path.join(BASE_DIR, 'static')
]

(2) 首先,新建一个django项目,在项目下的urls.py文件里,配置跳转路由,跳转到首页

urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^student/', include('student.urls'))
]

(3) 通过python manage.py startapp student命令创建一个student的app(不要忘记在settings中配置一下),并在models.py下执行mysql操作,在这里我们就直接在数据库里手动创建表,不再使用sql语句创建表了

models.py

import pymysql
# Create your models here.

# 管理数据库
class DBManager(object):

 @classmethod
 def open_sql(cls):
  conn = pymysql.connect(
   host='127.0.0.1',
   port=3306,
   db='students',
   user='root',
   password='123456',
   use_unicode=True,
   charset='utf8'
  )
  DBManager.conn = conn
  DBManager.cursor = conn.cursor()

 @classmethod
 def close_sql(cls):
  DBManager.conn.commit()
  DBManager.cursor.close()
  DBManager.conn.close()

# 数据模型类
class StudnetModel(object):

 def __init__(self, s_id, s_name, s_phone):
  self.s_id = s_id
  self.s_name = s_name
  self.s_phone = s_phone
  self.table = 'students'

 def save(self):
  """
  保存数据模型到数据库
  :return: False 表示数据已存在 True表示保存数据成功
  """
  DBManager.open_sql()
  # 如果s_id已存在,说明学号已存在
  sql = f'SELECT * FROM students WHERE s_id={self.s_id}'
  if DBManager.cursor.execute(sql) > 0:
   # 数据已存在,插入失败
   return False
  else:
   # 插入数据
   sql = 'INSERT INTO students(s_id,s_name,s_phone)VALUES(%s,%s,%s)'
   DBManager.cursor.execute(sql,(self.s_id, self.s_name, self.s_phone))
   DBManager.close_sql()
   return True

 @classmethod
 def delete(cls, s_id):
  """
  根据s_id删除数据
  :param s_id: 要删除数据的id
  :return: False表示该数据不存在 True删除成功
  """
  DBManager.open_sql()

  # 删除的sql语句
  sql = f'DELETE FROM students WHERE s_id={s_id}'
  DBManager.cursor.execute(sql)

  # rowcount 执行sql语句 影响的数据条数
  if DBManager.cursor.rowcount > 0:
   DBManager.close_sql()

   return True
  else:
   return False

 @classmethod
 def object_with_id(cls, s_id):

  DBManager.open_sql()
  sql = f'SELECT * FROM students WHERE s_id={s_id}'
  DBManager.cursor.execute(sql)
  # 取出拿到的数据
  result = DBManager.cursor.fetchone()
  DBManager.close_sql()
  if result:
   # 返回StudentModel对象
   return cls(result[0], result[1], result[2], )

 def modify(self):

  DBManager.open_sql()

  sql = f"UPDATE students SET s_name='{self.s_name}' , s_phone='{self.s_phone}' WHERE s_id={self.s_id}"

  DBManager.cursor.execute(sql)
  if DBManager.cursor.rowcount > 0:
   DBManager.close_sql()
   return True
  else:
   return False

 @classmethod
 def objects(cls):
  # 只要调用该函数,返回数据库中所有的数据
  DBManager.open_sql()
  sql = 'SELECT * FROM students'
  DBManager.cursor.execute(sql)
  # 取出查询的所有数据,results是一个大元组
  results = DBManager.cursor.fetchall()
  # 将results中每一个小元组转换为StudentModel对象
  students = map(lambda t:cls(t[0], t[1], t[2]), results)
  # 关闭数据库
  DBManager.close_sql()

  return students

if __name__ == '__main__':

 StudnetModel.objects()

(4) 接下来在自己新建的app下,再手动创建一个urls.py文件,用来配置具体路由,并在views.py文件里实现视图函数(存放具体的增删改查功能的函数)

student/urls.py

from django.conf.urls import url
from .views import *

urlpatterns = [
 url(r'^$', student_index, name='stu_index'),
 url(r'^modify/(?P<s_id>\d+)/$', student_modify, name='modify'),
 url(r'^addstu/$', student_add, name='addstu'),
 url(r'^delstu/(?P<s_id>\d+)/$', student_del, name='delstu'),
]

student/views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse

from .models import StudnetModel
# Create your views here.

def student_index(reqeust):

 # 取出数据库中所有的数据
 students = StudnetModel.objects()

 return render(reqeust, 'index.html', {'students': students})

def student_add(request):

 if request.method == 'POST':

  # 取出数据
  s_id = request.POST.get('id', None)
  s_name = request.POST.get('name', None)
  s_phone = request.POST.get('phone', None)

  if s_id and s_name and s_phone:
   try:
    int(s_id)
   except Exception as e:
    return HttpResponse('id必须是纯数字!')
   # 创建数据模型对象
   stu = StudnetModel(s_id, s_name, s_phone)
   # 保存数据
   if stu.save():
    # 重定向到首页
    return redirect('/student')
   else:
    # 返回提示信息
    return HttpResponse('该学号已存在!')
  else:
   return HttpResponse('添加信息不能为空!')
 else:
  # 其他访问方式,重定向到主页
  return redirect('/student')

def student_del(request, s_id):

 if request.method == 'GET':
  # MTV设计模式
  # 根据id判断是否存在

  if StudnetModel.delete(s_id):
   # 删除成功
   return redirect('/student')
  else:
   # 删除数据不存在
   return HttpResponse('要删除的数据不存在!')

def student_modify(request, s_id):

 if request.method == 'GET':

  # 根据s_id 查询这个id对应的信息
  stu = StudnetModel.object_with_id(s_id)
  if stu:
   return render(request, 'modify.html', {'stu': stu})
  else:

   return HttpResponse('要修改的学员id不存在!!')
 elif request.method == 'POST':

  # 取出修改后的参数
  s_name = request.POST.get('name')
  s_phone = request.POST.get('phone')
  stu = StudnetModel(s_id, s_name, s_phone)
  if stu.modify():

   return redirect('/student')
  else:

   return HttpResponse('修改失败,请稍后重试!')

(5) 最后就是在html代码中实现路由跳转,实现功能

首页html,index.html

{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">

<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 <meta name="author" content="bais">
 <title></title>
 <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
 <style>
  .navbar {
   border-radius: 0px;
   margin-bottom: 0;
  }

  .titleContent {
   background-color: #eeeeee;
  }

  .mToolbar {
   padding-top: 10px;
   padding-bottom: 10px;
  }

  .container-fluid {
   padding-left: 8vw;
  }

  @media (max-width:768px) {
   .container-fluid {
    padding-left: 15px;
   }
  }

  .form-horizontal .control-label{
   text-align: left;
  }
 </style>
</head>

<body>

 <!--
  导航
 -->
 <nav class="navbar navbar-inverse" role="navigation">
  <div class="container-fluid">
   <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#example-navbar-collapse">
   <span class="sr-only">切换导航</span>
   <span class="icon-bar"></span>
   <span class="icon-bar"></span>
   <span class="icon-bar"></span>
  </button>
    <a class="navbar-brand" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >学员管理系统</a>
   </div>
   <div class="collapse navbar-collapse" id="example-navbar-collapse">
    <ul class="nav navbar-nav">
     <li class=""><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首页</a></li>
     <li class="active"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >学员</a></li>

    </ul>

    <ul class="nav navbar-nav navbar-right">
     <li>
      <a href="#"></span> XXX<b class="caret"></b></a>
     </li>
     <li>
      <a href="#"></span> 退出</a>
     </li>
    </ul>

   </div>
  </div>
 </nav>
 <!--
  标题
 -->
 <div class="container-fluid titleContent">
  <h1>学员查询及管理</h1>
 </div>
 <!--
  工具栏部分 按钮
 -->
 <div class="container-fluid mToolbar">
  <button type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal">添加</button>

 </div>

 <!--
  模态框:搜索按钮绑定的模态框
 -->
 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
   <div class="modal-content">
    <div class="modal-header">
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
     <h4 class="modal-title" id="myModalLabel">搜索条件</h4>
    </div>
    <div class="modal-body">
     <!--
      添加模态框中的表单
     -->

     <form class="form-horizontal" role="form" action="{% url 'addstu' %}" method="post">
      <div class="form-group">
       <label for="firstname" class="col-sm-2 control-label">姓名</label>
       <div class="col-sm-4">
        <input type="text" class="form-control" id="firstname" name="name" placeholder="学员姓名">
       </div>
      </div>
      <div class="form-group">
       <label for="lastname" class="col-sm-2 control-label">学号</label>
       <div class="col-sm-4">
        <input type="text" class="form-control" id="lastname" name="id" placeholder="学员学号">
       </div>
      </div>
      {% csrf_token %}
      <div class="form-group">
       <label for="lastname" class="col-sm-2 control-label">电话</label>
       <div class="col-sm-7">
        <input type="text" class="form-control" id="lastname" name="phone" placeholder="电话号码">
       </div>
      </div>

      <div class="modal-footer">
     <button type="submit" class="btn btn-success">提交</button>
    </div>

     </form>

    </div>

   </div>
   <!-- /.modal-content -->
  </div>
  <!-- /.modal -->
 </div>

 <!--
  表格
 -->
 <div class="container-fluid">
  <div class="table-responsive ">
   <table class="table table-bordered table-condensed">
    <thead>
     <tr class="active">
      <th>姓名</th>
      <th>学号</th>
      <th>电话</th>
      <th>编辑</th>
      <th>删除</th>
      <tbody>
       {% for stu in students %}
       <tr>
        <td>{{ stu.s_name }}</td>
        <td>{{ stu.s_id }}</td>
        <td>{{ stu.s_phone }}</td>

        <td><a href="{% url 'modify' stu.s_id %}" rel="external nofollow" ><span class="glyphicon glyphicon-edit"></span></a></td>

        <td><a href="{% url 'delstu' stu.s_id %}" rel="external nofollow" ><span class="glyphicon glyphicon-remove"></span></a></td>
       </tr>
       {% endfor %}
      </tbody>
     </tr>
    </thead>
   </table>
  </div>
 </div>

 <script src="{% static 'js/jquery-3.1.1.js' %}"></script>
 <script src="{% static 'js/bootstrap.min.js' %}"></script>
</body>

</html>

增加 / 修改学员页面,modif.html

 <!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>修改学员信息-{{ stu.s_name }}</title>
 <link rel="stylesheet" href="style.css" >
 <style>
 .smart-green {
 margin-left: auto;
 margin-right: auto;
 max-width: 500px;
 background: #F8F8F8;
 padding: 30px 30px 20px 30px;
 font: 12px Arial, Helvetica, sans-serif;
 color: #666;
 border-radius: 5px;
 -webkit-border-radius: 5px;
 -moz-border-radius: 5px;
 }

 .smart-green h1 {
 font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif;
 padding: 20px 0px 20px 40px;
 display: block;
 margin: -30px -30px 10px -30px;
 color: #FFF;
 background: #9DC45F;
 text-shadow: 1px 1px 1px #949494;
 border-radius: 5px 5px 0px 0px;
 -webkit-border-radius: 5px 5px 0px 0px;
 -moz-border-radius: 5px 5px 0px 0px;
 border-bottom: 1px solid #89AF4C;
 }

 .smart-green h1 > span {
 display: block;
 font-size: 11px;
 color: #FFF;
 }

 .smart-green label {
 display: block;
 margin: 0px 0px 5px;
 }

 .smart-green label > span {
 float: left;
 margin-top: 10px;
 color: #5E5E5E;
 }

 .smart-green input[type="text"], .smart-green input[type="email"], .smart-green textarea, .smart-green select {
 color: #555;
 height: 30px;
 line-height: 15px;
 width: 100%;
 padding: 0px 0px 0px 10px;
 margin-top: 2px;
 border: 1px solid #E5E5E5;
 background: #FBFBFB;
 outline: 0;
 -webkit-box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
 box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
 font: normal 14px/14px Arial, Helvetica, sans-serif;
 }

 .smart-green textarea {
 height: 100px;
 padding-top: 10px;
 }

 .smart-green .button {
 background-color: #9DC45F;
 border-radius: 5px;
 -webkit-border-radius: 5px;
 -moz-border-border-radius: 5px;
 border: none;
 padding: 10px 25px 10px 25px;
 color: #FFF;
 text-shadow: 1px 1px 1px #949494;
 }

 .smart-green .button:hover {
 background-color: #80A24A;
 }

 .error-msg{
 color: red;
 margin-top: 10px;
 }
 .success-msg{
 color: #80A24A;
 margin-top: 10px;
 margin-bottom: 10px;
 }
 </style>
</head>
<body>
<form action="{% url 'modify' stu.s_id %}" method="post" class="smart-green">
 {% csrf_token %}
 <h1>修改学员信息-{{ stu.s_name }}
  <span>请输入修改后的信息.</span>
 </h1>
 <label>
  <span>姓名 :</span>
  <input id="name" type="text" name="name" class="error" placeholder="请输入修改后姓名" value="{{ stu.s_name }}">
  <div class="error-msg"></div>
 </label>

 <label>
  <span>电话 :</span>
  <input id="email" type="text" value="{{ stu.s_phone }}" name="phone" placeholder="请输入修改后的电话"/>
  <div class="error-msg"></div>
 </label>
 <label>
  <span> </span>
  <input type="submit" class="button" value="提交"/>
 </label>

</form>

</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Django admin实现图书管理系统菜鸟级教程完整实例

    Django 有着强大而又及其易用的admin后台,在这里,你可以轻松实现复杂代码实现的功能,如搜索,筛选,分页,题目可编辑,多选框. 简单到,一行代码就可以实现一个功能,而且模块之间耦合得相当完美. 不信,一起来看看吧!?用Django实现管理书籍的系统,并能在前台界面对书籍进行增删查改,筛选,分页,以及批量查询修改功能. 准备工作 #准备好你的数据库模型思维导图 0.新建一个Django项目,起名为books,并且同时新建一个应用book11 1.首先要设置models模块,根据思维导图,我

  • Django实现学生管理系统

    Django学习笔记-学生管理系统(Django实现)笔记中仅实现了对数据的全部查询. 下面实现新增.删除.修改,代码如下. 下面的代码没有对输入框内容进行限制,如果输入不符合规则的内容,会出现错误. 本篇更新完毕后Django更新暂停一段,由于工作岗位是测试工程师,后面将重点关注测试相关内容. views.py from django.shortcuts import render,reverse from stusys import models from django.http impor

  • 基于 Django 的手机管理系统实现过程详解

    一.概述 打算通过设计数据库,然后结合 Python 框架Django,实现在网页上对数据库的增删改查(本例以手机的管理为例,不考虑订购功能),有普通用户界面和管理员用户界面,普通用户只能做简单的查看需求,管理员用户可以实现对数据库内容的实时修改. 网站主体如下图: 二.设计数据库 根据业务需求,设计数据表,需要下列这些属性: 手机型号.品牌.手机描述.出厂年份.价格.照片.产地. 根据数据表设计原则,数据表设计需要满足基本的函数依赖和范式要求,因此我们将上述属性拆分为四张表格,并建立这些数据表

  • python3+django2开发一个简单的人员管理系统过程详解

    一.基础环境准备 windows环境: Pycharm python3.6 Django2.0.1 Mysql5.7 安装django 在pycharm terminal 控制台执行: python3 -m pip install django #因为本地安装了python2.7 和python3.6 2个版本,所以python3.6环境变量对应python3 二.创建工程和应用 django-admin.py startproject qiakrcmdb #工程名称 cd qiakrcmdb

  • python3.6+django2.0开发一套学员管理系统

    1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建 2.在demo项目目录下新建目录static,并在settings.py中追加代码: STATICFILES_DIRS=(os.path.join(BASE_DIR, 'static'),) 3.在setting.py中添加模板路径: TEMPLATES = [ { 'BACKEND': '...', 'DIRS': [os.path.join(BASE_DIR, 'templates'),],

  • Django实现学员管理系统

    本文实例为大家分享了Django实现学员管理系统的具体代码,供大家参考,具体内容如下 要求:实现数据的增删改查功能,并同步至数据库中.此项目实现了前端以及后端的结合. (1) 先在settings里配置static(存放的是css样式.js代码.以及imgs),可以加在文件末尾 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] (2) 首先,新建一个django项目,在项目下的urls.

  • python实现学员管理系统

    python实现学员管理系统这个小程序是我刚刚接触python时,导师带着做的第一个小项目.通过这次练习,我学会了很多东西.下面是具体的代码和要求 ''' 学员管理系统1.0版本 1.添加学员     1.1 输入要添加的学员     1.2 将学员添加到列表中 2.修改学员     2.1 输出所有的学员及学员索引(从1开始输出)     2.2 选择要修改的学员索引,判断索引是否在范围     2.3 输入要修改的值,根据选择的索引进行修改 3.删除学员     3.1 根据序号删除学员  

  • Django 自定义权限管理系统详解(通过中间件认证)

    1. 创建工程文件, 修改setting.py文件 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 setting.py 最终的配置文件 import os import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR =

  • Python函数实现学员管理系统

    本文实例为大家分享了Python函数实现学员管理系统的具体代码,供大家参考,具体内容如下 这个是一个简单的管理程序 输入姓名,年龄,性别(也可以添加其他类别例如性取向),然后以列表的形式保存(默认为空列表).功能如下: 按1添加成员 按2删除成员 按3修改成员信息(目前不包括姓名但是可以添加) 按4检索并打印某个成员的全部信息 按5打印全部成员的信息 按6退出程序 大概就是这样子.下面是代码: import time def main(): '''主函數''' while True: sl(),

  • python实现学员管理系统(面向对象版)

    前言 使用面向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:使用面向对象的方法 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信息.保存学员信息及退出系统等功能. 分析 角色分析 - 学员- 管理系统 工作中注意事项 -为了方便维护代码,一般一个角色一个程序文件- 项目要有主程序入口,习惯称为main.py 创建程序文件 1.创建项目目录,例如:StudentmangerSystem2.程序文件如下: 程序入口文件:main.py 学员文件:studnet.p

  • C#实现学员信息管理系统

    新手写一段学员信息管理系统,有代码冗余的情况请谅解,代码如下,请大神指点 //登陆入口页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Thread

  • 解决Django部署设置Debug=False时xadmin后台管理系统样式丢失

    对于使用Django框架开发的系统,当部署时设置settings.py文件中Debug=False时xadmin后台管理系统样式会丢失. [问题原因]: django的生产环境不同开发环境,在生产环境下(DEBUG=False),django.contrib.staticfiles 是不起任何作用的,也就说 django.contrib.staticfiles 只对开发环境(DEBUG=True)开启.所以会导致xadmin样式丢失现象. [解决方案]: ①在settings.py中添加如下配置

随机推荐