1. 程式人生 > >Django框架 + Mysql 班級管理系統(多表聯查)

Django框架 + Mysql 班級管理系統(多表聯查)

這裡運用了後端重新整理頁面來實現使用者的一些操作,話不多說,直接上程式碼

首先咱們要先建立一個專案目錄

在這裡插入圖片描述

進入我們電腦cmd 終端中,我這裡使用的是gitbash,cd到我們的專案目錄中

在這裡插入圖片描述

接下來的操作非常重要

建立我們的專案名稱classMS(classmanage system) 在這裡插入圖片描述 cd到我們的專案中 在這裡插入圖片描述 進來後我們建立一個template的資料夾 在這裡插入圖片描述 建立我們的應用名稱,這裡是myapply 在這裡插入圖片描述 注意不要忘記遷移資料庫 在這裡插入圖片描述

在這裡插入圖片描述 還沒結束,這時開啟我們的專案classMS(我這裡用的是pyc), 此時略過很多字,(根據我們的上上片文章來配置)

models.py下定義我們的資料庫 在這裡插入圖片描述 這裡我們有了兩個表,ForeignKey為Students的外來鍵,此時一個班級對應多個學生

**專案目錄下classMS *

     __init__.py下配置我們資料庫

在這裡插入圖片描述

settings.py下配置:

在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

 urls.py下配置
 **注意 myapply中的urls.py需要我們手動建立**

在這裡插入圖片描述

找到我們的應用myapply

urls.py下

在這裡插入圖片描述

views.py下
	from django.shortcuts import render, redirect, reverse
	from django.http import HttpResponse, HttpResponseRedirect
	from django.views.decorators.csrf import csrf_exempt
	from .models import Grades, Students
	
	# Create your views here.
	
	
	# TODO: 這裡是主頁
	def home_page(request):
	    cookie = request.COOKIES.get('id')
	    list_g = Grades.objects.all()
	    if cookie:
	        obj = list_g.get(id=cookie)
	        gname = obj.gname
	    else:
	        gname = list_g[0].gname
	        obj = list_g[0]
	    list_s = Students.objects.filter(grade=obj)
	    return render(request, 'classms/index.html', {'list_g': list_g, 'list_s': list_s})
	
	
	# TODO: 新增班級
	@csrf_exempt
	def add_grade(request):
	    gname = request.POST['gname']
	    list_g = Grades.objects.filter(gname=gname)
	    if not list_g:
	        last_g = Grades.objects.last()
	        if last_g:
	            gid = str(int(last_g.gid) + 1)
	        else:
	            gid = '10001'
	        obj = Grades(gid=gid, gname=gname)
	        obj.save()
	        return redirect(reverse('class_ms:home'))
	    else:
	        print('dd')
	        return HttpResponse(u'班級已存在')
	
	
	# TODO; 新增學生
	def add_stu(request):
	    sname = request.POST['sname']
	    gname = request.POST['gname']
	    find_g = Grades.objects.filter(gname=gname)
	    if find_g:
	        last_s = Students.objects.all().last()
	        if last_s:
	            sid = str(int(last_s.sid)+1)
	        else:
	            sid = '20180001'
	        obj = Students(sid=sid, sname=sname, grade=find_g[0])
	        obj.save()
	        return redirect(reverse('class_ms:home'))
	    else:
	        print('ff')
	        return HttpResponse(u'輸入的班級不存在')
	
	
	# TODO: 更改學生資訊
	def update_stu(request):
	    sid = request.POST['sid']
	    sname = request.POST['sname']
	    gname = request.POST['gname']
	    find_g = Grades.objects.filter(gname=gname)
	    if find_g:
	        Students.objects.filter(sid=sid).update(sname=sname, grade=find_g[0])
	        return redirect(reverse('class_ms:home'))
	    else:
	        return HttpResponse(u'輸入的班級不存在')
	
	
	# TODO: 刪除學生
	def delete_stu(request):
	    sid = request.GET.get('pk')
	    res = Students.objects.filter(sid=sid)
	    if res:
	        res.delete()
	        return redirect(reverse('class_ms:home'))
	    else:
	        return HttpResponse(u'刪除失敗')
	
	
	# TODO: cookie切換班級
	def change_grade(request, id):
	    res = HttpResponseRedirect(reverse('class_ms:home'))
	    res.set_cookie('id', id, 50)
	    return res

templates下html

	<!DOCTYPE html>
	{% load staticfiles %}
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>首頁</title>
	    <link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
	    <link rel="stylesheet" href="{% static 'css/reset.css' %}">
	    <script src="{% static 'js/jquery-3.3.1.js' %}"></script>
	    <script src="{% static 'js/bootstrap.js' %}"></script>
	</head>
	<body>
	<div class="wrapper">
	    <div class="header"></div>
	    <div class="content container-fluid">
	        <div class="row">
	            <div class="col-md-3">
	                <button class="btn bg-primary" data-toggle="modal" data-target="#addc">新增班級</button>
	
	            </div>
	            <div class="col-md-9">
	                <button class="btn bg-primary" data-toggle="modal" data-target="#adds">新增學生</button>
	            </div>
	        </div>
	        <div class="row">
	            <div class="col-md-3">
	                {% if list_g %}
	                    <ul>
	                        {% for item in list_g %}
	                            <li>
	                                <a href="{% url 'class_ms:gchange' item.id %}">
	                                    <ul>
	                                        <li>
	                                            <span>{{ item.gname }}</span>
	                                        </li>
	                                    </ul>
	                                </a>
	                            </li>
	                        {% endfor %}
	                    </ul>
	                {% else %}
	                    <span>請新增班級</span>
	                {% endif %}
	            </div>
	            <div class="col-md-9">
	                {% if list_g %}
	                    <ul>
	                        {% for item in list_s %}
	                            <li>
	                                <ul>
	                                    <li>
	                                        <span>{{ item.sid }}</span>
	                                        <span>{{ item.sname }}</span>
	                                        <span>{{ item.grade.gname }}</span>
	                                        <input type="button" class="btn btn-primary" data-toggle="modal" data-target="#{{ item.sid }}" value="編輯" style="padding: 2px;">
	                                        <a href="{% url 'class_ms:deletestu' %}?pk={{ item.sid }}" type="button" class="btn btn-primary" value="編輯" style="padding: 2px;">刪除</a>
	                                        <!-- 模態框(Modal) -->
	                                        <div class="modal fade" id="{{ item.sid }}" 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">&times;</button>
	                                                        <h4 class="modal-title" id="myModalLabel">編輯資訊</h4>
	                                                    </div>
	                                                    <div class="modal-body">
	                                                        <form action="{% url 'class_ms:updatestu' %}" method="post">
	                                                            {% csrf_token %}
	                                                            <input type="text" name="sname" value="{{ item.sname }}">
	                                                            <input type="text" name="gname" value="{{ item.grade.gname }}">
	                                                            <input type="text" name="sid" value="{{ item.sid }}" hidden>
	                                                            <input type="submit" class="btn bg-danger" value="儲存">
	                                                        </form>
	                                                    </div>
	                                                </div><!-- /.modal-content -->
	                                            </div><!-- /.modal -->
	                                        </div>
	                                    </li>
	                                </ul>
	
	                            </li>
	                        {% endfor %}
	                    </ul>
	                {% endif %}
	            </div>
	        </div>
	    </div>
	    <!-- 模態框(Modal) -->
	    <div class="modal fade" id="addc" 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">&times;</button>
	                    <h4 class="modal-title" id="myModalLabel">新增班級</h4>
	                </div>
	                <div class="modal-body">
	                    <form action="{% url 'class_ms:addg' %}" method="post">
	                        <input type="text" name="gname" placeholder="班級名稱" required>
	                        <input type="submit" class="btn bg-danger" value="儲存">
	                    </form>
	                </div>
	            </div><!-- /.modal-content -->
	        </div><!-- /.modal -->
	    </div>
	     <!-- 模態框(Modal) -->
	    <div class="modal fade" id="adds" 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">&times;</button>
	                    <h4 class="modal-title" id="myModalLabel">新增學生</h4>
	                </div>
	                <div class="modal-body">
	                    <form action="{% url 'class_ms:adds' %}" method="post">
	                        {% csrf_token %}
	                        <input type="text" name="sname" placeholder="學生姓名" required>
	                        <input type="text" name="gname" placeholder="班級名稱" required>
	                        <input type="submit" class="btn bg-danger" value="儲存">
	                    </form>
	                </div>
	            </div><!-- /.modal-content -->
	        </div><!-- /.modal -->
	    </div>
	</div>
	<form action="#">
	    {% csrf_token %}
	</form>
	</body>
	</html>

收工, django+mysql 班級管理系統基本的已經實現