• 学生选课小项目——麻雀虽小,五脏俱全(Templates)


    架构:

    Templates

    get_classes.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    
    
    <div>
        <a href="/add_classes.html">添加</a>
    
    </div>
    <div>
        <table border="1">
            <thead>
            <tr>
                <th>ID</th>
                <th>名称</th>
                <th>任课老师</th>
                <th>操作</th>
    
    
    
    
            </tr>
            </thead>
            <tbody>
                {% for row in cls_list %}
                    <tr>
                        <td>
    
                            {{ row.id }}
                        </td>
    
                        <td>
                            {{ row.title }}
                        </td>
    
                         <td>
    {#                     班级对象里面,通过.m.all就可以获得老师对象,然后将老师对象循环,显示老师名称#}
                             {% for item in row.m.all %}
                                 <span>{{ item.name }}</span>
                             {% endfor %}
    
                         </td>
                        <td>
                           <a href="/delete.html?nid={{ row.id }}">删除</a>
    
                            <a href="/update.html?nid={{ row.id }}">修改</a>
    
                            <a href="/set_teachers.html?nid={{ row.id }}">分配老师</a>
                        </td>
    
    
                    </tr>
                {% endfor %}
                
            </tbody>
            
    
    
    
        </table>
    
    
    </div>
    
    </body>
    </html>
    View Code

    get_students.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    
    
    <div>
        <a href="/add_students.html">添加</a>
    
    </div>
    <div>
        <table border="1">
            <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>班级</th>
                <th>操作1</th>
                <th>操作2</th>
    
    
            </tr>
            </thead>
            <tbody>
                {% for row in stu %}
                    <tr>
                        <td>
    
                            {{ row.id }}
                        </td>
    
                        <td>
                            {{ row.username }}
                        </td>
                        <td>
                            {{ row.age }}
                        </td>
                        <td>
                            {{ row.gender }}
                        </td>
    
                        <td>
                            {{ row.cs.title }}
                        </td>
    
    
                        <td>
                           <a href="/delete_students.html?sid={{ row.id }}">删除</a>
                        </td>
    
                        <td>
                            <a href="/update_students.html?sid={{ row.id }}">修改</a>
                        </td>
    
    
                    </tr>
                {% endfor %}
                
            </tbody>
            
    
    
    
        </table>
    
    
    </div>
    
    </body>
    </html>
    View Code

    get_teachers.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    
    
    <div>
        <a href="/add_teachers.html">添加</a>
    
    </div>
    <div>
        <table border="1">
            <thead>
            <tr>
                <th>ID</th>
                <th>名称</th>
                <th>任课班级</th>
                <th>操作</th>
    
            </tr>
            </thead>
            <tbody>
                {% for tea in tea_list %}
                    <tr>
                        <td>
    
                            {{ tea.id }}
                        </td>
    
                        <td>
                            {{ tea.name }}
                        </td>
    
                         <td>
    {#                     班级对象里面,通过.m.all就可以获得老师对象,然后将老师对象循环,显示老师名称#}
                             {% for item in tea.classes_set.all %}
                                 <span>{{ item.title }}</span>
                             {% endfor %}
    
                         </td>
                        <td>
                           <a href="/delete_teachers.html?tid={{ tea.id }}">删除</a>
    
                            <a href="/update_teachers.html?tid={{ tea.id }}">修改</a>
    
                            <a href="/set_classes.html?tid={{ tea.id }}">分配班级</a>
                        </td>
    
    
                    </tr>
                {% endfor %}
                
            </tbody>
            
    
    
    
        </table>
    
    
    </div>
    
    </body>
    </html>
    View Code

    add_classes.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="add_classes.html" method="post">
        {% csrf_token%}
    
        <input type="text" name="title">
    
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    View Code

    add_students.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h3>添加用户</h3>
    <form action="/add_students.html" method="post">
        {% csrf_token%}
        <p>姓名:<input type="text" name="username"></p>
        <p>年龄:<input type="text" name="age"></p>
        <p> 男:<input type="radio" name="gender" value="男">
            女:<input type="radio" name="gender" value="女">
        </p>
        {# 在一对多时,要用到下拉框的情况下,要去已有的数据库去取数据,取得时候别别忘了对应ID#}
        <p>
            <select name="cs">
                {% for c in cs %}
                <option value="{{ c.id }}">{{ c.title }}</option>
    
                {% endfor %}
            </select>
        </p>
        <input type="submit" value="提交">
        
        
        
    </form>
    
    </body>
    </html>
    View Code

    add_teachers.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="add_teachers.html" method="post">
        {% csrf_token%}
    
        <input type="text" name="teacher">
    
        <input type="submit" value="提交">
        
        
        
    </form>
    
    </body>
    </html>
    View Code

    set_classes.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <form action="/set_classes.html?tid={{ tid }}" method="post">
    {% csrf_token %}
    <select multiple size="10" name="classes_ids">
        {% for item in all_classes_list %}
            {% if item.id in id_list %}
                <option value="{{ item.id }}" selected="selected">{{ item.title }}</option>
    
            {% else %}
    
                <option value="{{ item.id }}">{{ item.title }}</option>
            {% endif %}
    
        {% endfor %}
    
    
    
    </select>
        <input type="submit" value="提交">
    </form>
    
    
    </body>
    </html>
    View Code

    set_teachers.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <form action="/set_teachers.html?nid={{ nid }}" method="post">
    {% csrf_token %}
    <select multiple size="10" name="teacher_ids">
        {% for item in all_teacher_list %}
    {#        item.id=老师表里面的老师ID#}
            {% if item.id in id_list %}
                <option value="{{ item.id }}" selected="selected">{{ item.name }}</option>
    
            {% else %}
    
                <option value="{{ item.id }}">{{ item.name }}</option>
            {% endif %}
    
        {% endfor %}
    
    
    
    </select>
        <input type="submit" value="提交">
    </form>
    
    
    </body>
    </html>
    View Code

    update_classes.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {#<form action="/update.html" method="post">#}
    {#在你点提交的时候要连着ID一块提交,有两种方法,一种是文本框隐藏提交,一种直接根据?nid提交#}
    <form action="/update.html?nid={{cls.id}}" method="post">
        {% csrf_token%}
    {#    <input type="text" name="id" value="{{cls.id}}" style="display: none">#}
    {#    编辑时候要先获取到数据#}
        <input type="text" name="nt" value="{{cls.title}}">
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    View Code

    update_students.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {#在你点提交的时候要连着ID一块提交,有两种方法,一种是文本框隐藏提交,一种直接根据?sid提交#}
    <form action="/update_students.html?sid={{stu.id}}" method="post">
        {% csrf_token %}
        <p><input type="text" name="username" value="{{stu.username}}"></p>
    
        <p><input type="text" name="age" value="{{stu.age}}"> </p>
        <p>
    {#        因为要进行默认判断,如果为男,默认要点在男上。#}
            {% if stu.gender == "男" %}
    {#            checked="checked" 默认#}
                男:<input type="radio" name="gender" checked="checked" value="男">
                女:<input type="radio" name="gender" value="女">
            {% else %}
                男:<input type="radio" name="gender" value="男">
                女:<input type="radio" name="gender" checked="checked" value="女">
            {% endif %}
        </p>
        <p>
            <select name="cls">
                {% for c in cs %}
    {#                判断,进行默认班级的显示#}
                    {% if c.id == stu.cs_id %}
    {#                selected="selected" 默认选取    #}
                        <option value="{{ c.id }}" selected="selected">{{ c.title}}</option>
                    {% else %}
                        <option value="{{ c.id }}">{{ c.title}}</option>
                    {% endif %}
                {% endfor %}
    
    
            </select>
        </p>
    
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    View Code

    update_teachers.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {#<form action="/update.html" method="post">#}
    {#在你点提交的时候要连着ID一块提交,有两种方法,一种是文本框隐藏提交,一种直接根据?nid提交#}
    <form action="/update_teachers.html?tid={{teacher_list.id}}" method="post">
        {% csrf_token%}
    {#    <input type="text" name="id" value="{{cls.id}}" style="display: none">#}
    {#    编辑时候要先获取到数据#}
        <input type="text" name="up_tea" value="{{teacher_list.name}}">
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    View Code

    Urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from django.urls import path
    from app01.views import classes
    from app01.views import students
    from app01.views import teachers
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    
    
        url(r'^classes.html$',classes.get_classes),
        url(r'^add_classes.html$',classes.add_classes),
        url(r'^delete.html$',classes.delete_classes),
        url(r'^update.html$',classes.update_classes),
        url(r'^set_teachers.html$',classes.get_teacher),
    
    
        url(r'^students.html$',students.get_student),
        url(r'^add_students.html$',students.add_student),
        url(r'^delete_students.html$',students.delete_student),
        url(r'^update_students.html$',students.update_student),
    
        url(r'^teachers.html$',teachers.get_teacher),
        url(r'^add_teachers.html$', teachers.add_teacher),
        url(r'^delete_teachers.html$',teachers.delete_teacher),
        url(r'^update_teachers.html$',teachers.update_teacher),
        url(r'^set_classes.html$',teachers.get_classes),
    
    ]
    View Code

    Models.py

    from django.db import models
    
    # Create your models here.
    
    
    class Classes(models.Model):
        """
        班级表
        """
        title=models.CharField(max_length=32)
        m = models.ManyToManyField("Teachers")
    
    class Teachers(models.Model):
        """
        老师表
        """
        name=models.CharField(max_length=32)
    
    
    ######################## 单表 ########################
    # 增加
    # Teachers.objects.create(name='root')
    # obj = Teachers(name='root')
    # obj.save()
    #
    # Teachers.objects.all()
    # Teachers.objects.filter(id=1)
    # Teachers.objects.filter(id=1,name='root')
    # result = Teachers.objects.filter(id__gt=1)
    # [obj(id,name),]
    # result = Teachers.objects.filter(id__gt=1).first()
    # 删除
    # Teachers.objects.filter(id=1).delete()
    #
    # Teachers.objects.all().update(name='alex')
    # Teachers.objects.filter(id=1).update(name='alex')
    
    
    class Student(models.Model):
        username=models.CharField(max_length=32)
        age = models.IntegerField()
        gender=models.CharField(max_length=10)
        cs=models.ForeignKey(Classes,on_delete=models.CASCADE) # 如果classes在上面不用带引号
    
    
    ######################## 一对多 ########################
    """
    班级:
    id    name
     1    3班
     2    6班
    
    学生
    id   username    age    gender   cs_id
    1      东北       18     男         1
    2      东北1      118     男        2
    2      东北1      118     男        1
    """
    # 增加
    # Student.objects.create(username='东北',age=18,gender='男',cs_id=1)
    # Student.objects.create(username='东北',age=18,gender='男',cs= Classes.objects.filter(id=1).first() )
    # 查看
    """
    ret = Student.objects.all()
    # []
    # [ obj(..),]
    # [ obj(1      东北       18     男         1),obj(2      东北1      118     男         2),obj(..),]
    for item in ret:
        print(item.id)
        print(item.username)
        print(item.age)
        print(item.gender)
        print(item.cs_id)
        print(item.cs.id)
        print(item.cs.name)
    """
    # 删除
    # Student.objects.filter(id=1).delete()
    # Student.objects.filter(cs_id=1).delete()
    
    # cid = input('请输入班级ID')
    # Student.objects.filter(cs_id=cid).delete()
    
    # cname = input('请输入班级名称')
    # Student.objects.filter(cs_id=cid).delete()
    # Student.objects.filter(cs__name=cname).delete()
    
    
    
    ######################## 多对多 ########################
    
    # 多对多
    """
    班级:
    id  title
    1    3班
    2    4班
    3    5班
    老师:
    id   title
     1    Alex
     2    老妖
     3    瞎驴
     4    Eric
     老师班级关系表(类):
    id   班级id   老师id
     1     1        2
     2     1        3
     4     2        2
     5     2        3
     6     2        4
     7     1        5
    
    
    # 增
    obj = Classes.objects.filter(id=1).first() #1    3班
    obj.m.add(2)
    obj.m.add([4,3])
    
    # obj = Classes.objects.filter(id=2).first() #1    3班
    # obj.m.add(2)
    # obj.m.add([4,3])
    
    obj = Classes.objects.filter(id=1).first() #1    3班
    # 删除
    # obj.m.remove([4,3])
    # 清空
    obj.m.clear()
    # 重置
    obj.m.set([2,3,5])
    
    # 查第三张表
    # 把3班的所有老师列举
    obj = Classes.objects.filter(id=1).frist()
    obj.id
    obj.titile
    ret = obj.m.all() # 第三张表
    # ret是一个 [ 老师1(id,name),obj(id,name)   ]
    """
    View Code

    Views

    classes.py

    from django.shortcuts import render, HttpResponse, redirect
    
    from app01 import models
    
    
    def get_classes(request):
        cls_list = models.Classes.objects.all()
    
        return render(request, "get_classes.html", {"cls_list": cls_list})
    
    
    def add_classes(request):
        if request.method == "GET":
            return render(request, "add_classes.html")
        elif request.method == "POST":
            title = request.POST.get('title')
            models.Classes.objects.create(title=title)
    
        return redirect("classes.html")  # URL 路径
    
    
    def delete_classes(request):
        nid = request.GET.get("nid")
        models.Classes.objects.filter(id=nid).delete()
        return redirect("classes.html")
    
    
    def update_classes(request):
        if request.method == "GET":  # 在你点击修改的时候,因为没有限制,所以默认是GET提交
            nid = request.GET.get("nid")  # 然后就是获得nid
            cls_list = models.Classes.objects.filter(id=nid).first()  # 这个地方必须用first
            return render(request, "update_classes.html", {"cls": cls_list})  # 或者原始数据
        elif request.method == "POST":  # 因为设定所以当你点提交的时候 就会执行以下操作
            nid = request.GET.get("nid")  # 一样先获得ID,后面要根据ID 修改
            new_title = request.POST.get("nt")  # 获得新输入的名字,nt是前面文本框的name
            models.Classes.objects.filter(id=nid).update(title=new_title)  # 最后根据ID来修改title
        return redirect("classes.html")  # 跳转页面
    
    
    def get_teacher(request):
        if request.method == "GET":
            nid = request.GET.get("nid")
            cls_obj = models.Classes.objects.filter(id=nid).first()  # 获得班级对象
            cls_teacher_list = cls_obj.m.all().values_list('id', 'name')  # 通过 班级对象.多对多名称.all 获得 老师对象列表
            # 当前班级任课老师的ID列表
            id_list = list(zip(*cls_teacher_list))[0] if list(zip(*cls_teacher_list)) else []  # 获得老师对象列表的第一个字段,也就是id
            all_teacher_list = models.Teachers.objects.all()
            return render(request,
                          "set_teacher.html",
                          {
                              'id_list': id_list,
                              # 'cls_teacher_list': cls_teacher_list,  # 这个是当前班级老师的对象
                              'all_teacher_list': all_teacher_list,  # 这个是所有老师的对象
                              'nid': nid
                          }
                          )
        elif request.method == "POST":
            nid = request.GET.get("nid")
            ids = request.POST.getlist('teacher_ids')
            obj = models.Classes.objects.filter(id=nid).first()
            obj.m.set(ids)
    
        return redirect("classes.html")
    View Code

    students.py

    from django.shortcuts import render, HttpResponse, redirect
    
    from app01 import models
    
    
    def get_student(request):
        stu_list = models.Student.objects.all()
    
        return render(request, "get_students.html", {"stu": stu_list})
    
    
    def add_student(request):
        if request.method == "GET":
            # 因为添加学生时,要找到已有的班级,所以要先获得班级,到前台页面下拉框中
            cs_list = models.Classes.objects.all()
            return render(request, 'add_students.html', {"cs": cs_list})
        elif request.method == "POST":
            u = request.POST.get("username")
            a = request.POST.get("age")
            g = request.POST.get("gender")
            cls = request.POST.get("cs")
            models.Student.objects.create(
                username=u,
                age=a,
                gender=g,
                cs_id=cls
            )
            return redirect("/students.html")
    
    
    def delete_student(request):
        student_id = request.GET.get("sid")
        models.Student.objects.filter(id=student_id).delete()
        return redirect("/students.html")
    
    
    def update_student(request):
        if request.method == "GET":
            student_id = request.GET.get("sid")
            stu_list = models.Student.objects.filter(id=student_id).first() # 获取的是一条数据
            cs = models.Classes.objects.values('id', 'title') # 需要啥就查啥,可以all()
            return render(request, "update_students.html", {"stu": stu_list, "cs": cs})
        if request.method == "POST":
            student_id = request.GET.get("sid")
            username = request.POST.get("username")
            age = request.POST.get("age")
            gender = request.POST.get("gender")
            cls_id = request.POST.get("cls")
            models.Student.objects.filter(id=student_id).update(
                username=username,
                age=age,
                gender=gender,
                cs_id=cls_id
            )
            return redirect('/students.html')
    View Code

    teachers.py

    from django.shortcuts import render, HttpResponse, redirect
    
    from app01 import models
    
    
    # 遍历老师
    def get_teacher(request):
        tea_list = models.Teachers.objects.all()
        return render(request, "get_teachers.html", {"tea_list": tea_list})
    
    
    # 删除老师
    def delete_teacher(request):
        tid = request.GET.get('tid')
        models.Teachers.objects.filter(id=tid).delete()
    
        return redirect("teachers.html")
    
    
    # 添加老师
    def add_teacher(request):
        if request.method == "GET":
            return render(request, "add_teachers.html")
        elif request.method == "POST":
            new_teacher = request.POST.get("teacher")
            models.Teachers.objects.create(name=new_teacher)
            return redirect("teachers.html")
    
    
    # 修改老师信息
    
    def update_teacher(request):
        if request.method == "GET":
            tid = request.GET.get("tid")
            teacher_list = models.Teachers.objects.filter(id=tid).first()
            return render(request, "update_teachers.html", {"teacher_list": teacher_list})
        elif request.method=="POST":
            tid = request.GET.get("tid")
            n_teacher=request.POST.get("up_tea")
            models.Teachers.objects.filter(id=tid).update(name=n_teacher)
            return redirect("teachers.html")
    
    # 疑问代码
    def get_classes(request):
        if request.method == "GET":
            tid = request.GET.get("tid")
            tea_obj = models.Teachers.objects.filter(id=tid).first() # 获得老师对象
    
            cls_teacher_obj=tea_obj.classes_set.all().values_list('id', 'title') # 通过老师获得对应的classes的对象
    
            id_list = list(zip(*cls_teacher_obj))[0] if list(zip(*cls_teacher_obj)) else []
    
            all_classes_list = models.Classes.objects.all()
            # for y2 in all_classes_list:
            #     print(y2.id)
    
            return render(request,
                          "set_classes.html",
                          {
                                'id_list': id_list,
                              # 'cls_obj: cls_teacher_list,  # 这个是当前班级老师的对象
                              'all_classes_list': all_classes_list,  # 这个是所有老师的对象
                              'cls_teacher_obj':cls_teacher_obj,
                              'tid': tid
                          }
                          )
        elif request.method == "POST":
            tid = request.GET.get("tid")
            ids = request.POST.getlist('classes_ids')
            obj=models.Teachers.objects.filter(id=tid).first()
            obj.classes_set.set(ids)
    
        return redirect("teachers.html")
    View Code
  • 相关阅读:
    FreeIPA部署及基本使用
    第7天:Django模板使用与表单
    第6天:数据库配置与模型
    第5天:基于类的视图与中间件
    linux下修改MySQL表名与表的字符编码
    webService理解(一)
    查询MySQL库下所有表名,数据为空的表名
    linux中MySQL连接找不到mysql.sock文件
    初步书写Webservice项目,运行后报错:Cannot assign requested address: bind
    linux配置jdk,MySQL环境
  • 原文地址:https://www.cnblogs.com/pyhan/p/12593681.html
Copyright © 2020-2023  润新知