maple-shaw

学生管理

学生表结构

class Student(models.Model):
    name = models.CharField(max_length=32)
    classes = models.ForeignKey(\'Classes\')  # 关联班级

查询学生

URL设计:

urls.py的urlpatterns列表中增加如下url:

  url(r\'^student_list/\', views.student_list, name=\'student_list\'),

视图函数:

def student_list(request):
    student_obj_list = models.Student.objects.all()
    return render(request, \'student_list.html\', {\'list\': student_obj_list})

student_list.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>列表展示</title>
</head>
<body>
<div>
    <table border="1">
        <thead>
        <tr>
            <th>序号</th>
            <th>学生姓名</th>
            <th>所属班级</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for obj in list %}
            <tr>
                <th>{{ obj.id }}</th>
                <td>{{ obj.name }}</td>
                <td>{{ obj.classes.name }}</td>
                <td>
                    <a href="/edit_student/?id={{ obj.id }}">编辑</a> |
                    <a href="/del_student/?id={{ obj.id }}">删除</a>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>
</body>
</html>

新增学生

URL设计:

    url(r\'^add_student/\', views.add_student, name=\'add_student\'),

视图函数:

def add_student(request):
    # 定义错误信息
    error_msg = \'\'
    # 获取所有班级对象
    class_obj_list = models.Classes.objects.all()
    # 判读请求方式,POST请求保存在数据库
    if request.method == \'POST\':
        student_name = request.POST.get(\'student\')
        class_id = request.POST.get(\'class_id\')
        if student_name:
            models.Student.objects.create(name=student_name, classes_id=class_id)
            return redirect(\'/student_list/\')
        else:
            error_msg = \'学生姓名不能为空,请重新输入\'
            class_obj_list = models.Classes.objects.all()
    return render(request, \'add_student.html\', {\'list\': class_obj_list, \'error_msg\': error_msg})

add_student.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>增加学生</title>
</head>
<body>
<div style="margin-top: 10px">
    <form action="" method="post">
        <p>
            <label for="student">学生姓名:</label>
            <input type="text" id="student" name="student">
        </p>
        <p>
            <label for="class">所属班级:</label>
            <select name="class_id" id="class">
                {% for class in list %}
                    <option value="{{ class.id }}">{{ class.name }}</option>
                {% endfor %}
            </select>
        </p>
        <p>
            <button type="submit">提交</button>
        </p>
    </form>
    {% if error_msg %}
        <p style="color: red">{{ error_msg }}</p>
    {% endif %}
</div>
</body>
</html>

注意:

提交POST请求前注释掉settings.py文件中45行上下的 \'django.middleware.csrf.CsrfViewMiddleware\', 

或者在HTML代码的form标签内加上 {% csrf_token %}的标签。二者选一即可提交POST请求。

另:可在student_list.html的代码中添加一个a标签: <a href="/add_student/">新页面添加</a> 

删除学生

URL设计:

    url(r\'^del_student/\', views.del_student, name=\'del_student\'),

视图函数:

def del_student(request):
    student_id = request.GET.get(\'id\')
    del_list = models.Student.objects.filter(id=student_id)
    if del_list:
        del_list.delete()
        return redirect(\'/student_list/\')
    else:
        return HttpResponse(\'删除错误\')

HTML部分:

在学生列表的表格中添加删除的a标签。

<a href="/del_student/?id={{ obj.id }}">删除</a>

编辑学生

URL设计:

    url(r\'^edit_student/\', views.edit_student, name=\'edit_student\'),

视图函数:

def edit_student(request):
    error_msg = \'\'
    student_id = request.GET.get(\'id\')
    student_obj = models.Student.objects.filter(id=student_id).first()
    classes_list = models.Classes.objects.all()
    if request.method == \'POST\':
        student_name = request.POST.get(\'student_name\')
        class_id = request.POST.get(\'class_id\')
        if student_name:
            student_obj.name = student_name
            student_obj.classes_id = class_id
            student_obj.save()
            return redirect(\'/student_list/\')
        else:
            error_msg = \'学生姓名不能为空,请重新输入\'
    return render(request, \'edit_student.html\',
                  {\'student_obj\': student_obj, \'classes_list\': classes_list, \'error_msg\': error_msg})

HTML部分:

在学生列表的表格中添加编辑的a标签。

<a href="/edit_student/?id={{ obj.id }}">编辑</a>

 edit_student.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>修改学生</title>
</head>
<body>
<div style="margin-top: 10px">
    <form action="" method="post">
        <p>
            <label for="student">学生姓名:</label>
            <input type="text" id="student" name="student_name" value="{{ student_obj.name }}">
        </p>
        <p>
            <label for="class">所属班级:</label>
            <select name="class_id" id="class">
                {% for class in classes_list %}
                    {% if student_obj.classes_id == class.id %}
                        <option selected value="{{ class.id }}">{{ class.name }}</option>
                    {% else %}
                        <option value="{{ class.id }}">{{ class.name }}</option>
                    {% endif %}
                {% endfor %}
            </select>
        </p>
        <p>
            <button type="submit" class="btn btn-default">提交</button>
        </p>
    </form>
    {% if error_msg %}
        <p style="color: red">{{ error_msg }}</p>
    {% endif %}
</div>
</body>
</html>

  

分类:

技术点:

相关文章: