day90-django学生列表之增删改查(form提交)

1.urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('students/', views.students),
    path('add_student/', views.add_student),
    path('del_student/', views.del_student),
    path('edit_student/', views.edit_student),
]

2.sqlhelper.py
import pymysql
def get_list(sql,args):
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='123',
        database='django_test',
        charset='utf8'
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    result = cursor.fetchall()#[{k1:v1,k2:v2,k3:v3},{k1:v1,k2:v2,k3:v3}]
    cursor.close()
    conn.close()
    return result

def get_one(sql,args):
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='123',
        database='django_test',
        charset='utf8'
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    result = cursor.fetchone()#{k1:v1,k2:v2,k3:v3}
    cursor.close()
    conn.close()
    return result

def modify(sql,args):
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='123',
        database='django_test',
        charset='utf8'
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    conn.commit()
    cursor.close()
    conn.close()

3.views.py
from app01 import sqlhelper
from django.shortcuts import render,redirect

#学生列表
def students(request):
    result = sqlhelper.get_list('select students.id,students.name,classes.title from students left join classes on students.class_id = classes.id',[])
    return render(request,'students.html',{'result':result})

#添加学生
def add_student(request):
    if request.method == 'GET':
        classes = sqlhelper.get_list('select id,title from classes',[])
        return render(request,'add_student.html',{'classes':classes})
    else:
        name = request.POST.get('name')
        class_id = request.POST.get('class_id')
        if name.strip():
            sqlhelper.modify('insert into students(name,class_id) values(%s,%s) ',[name,class_id])
            return redirect('/students/')
        else:
            classes = sqlhelper.get_list('select id,title from classes', [])
            return render(request, 'add_student.html', {'classes': classes,'name_error':'姓名不能为空'})

#删除学生
def del_student(request):
    nid = request.GET.get('nid')
    sqlhelper.modify('delete from students where id=%s',[nid])
    return redirect('/students/')

#编辑学生
def edit_student(request):
    if request.method == 'GET':
        nid = request.GET.get('nid')
        students = sqlhelper.get_one('select id,name,class_id from students where id=%s',[nid])
        classes = sqlhelper.get_list('select id,title from classes',[])
        return render(request,'edit_student.html',{'students':students,'classes':classes})
    else:
        nid = request.GET.get('nid')
        name = request.POST.get('name')
        class_id = request.POST.get('class_id')
        if name.strip():
            sqlhelper.modify('update students set name=%s,class_id=%s where id=%s',[name,class_id,nid])
            return redirect('/students/')
        else:
            students = sqlhelper.get_one('select id,name,class_id from students where id=%s', [nid])
            classes = sqlhelper.get_list('select id,title from classes', [])
            return render(request, 'edit_student.html', {'students': students, 'classes': classes,'name_error':'姓名不能为空'})

4.students.html
<body>
<h1>学生列表</h1>
<a href="/add_student/">添加</a>
<table border="1">
    <thead>
        <tr>
            <th>id</th>
            <th>name</th>
            <th>title</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
            {% for row in result %}
                <tr>
                    <td>{{ row.id }}</td>
                    <td>{{ row.name }}</td>
                    <td>{{ row.title }}</td>
                    <td>
                        <a href="/edit_student/?nid={{ row.id }}">编辑</a>
                        |
                        <a href="/del_student/?nid={{ row.id }}">删除</a>
                    </td>
                </tr>
            {% endfor %}
    </tbody>
</table>
</body>

 5.add_student.html

<body>
<h1>添加学生</h1>
<form method="POST" action="/add_student/">
    <p>姓名:
        <input type="text" name="name">
        <span style="color:red">{{ name_error }}</span>
    </p>
    <p>班级:
        <select name="class_id">
            {% for row in classes %}
                <option value="{{ row.id }}">{{ row.title }}</option>
            {% endfor %}
        </select>
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>
</body>

6.edit_student.html

<body>
<h1>编辑学生</h1>
<form method="POST" action="/edit_student/?nid={{ students.id }}">
    <p>姓名:
        <input type="text" name="name" value="{{ students.name }}">
        <span style="color:red">{{ name_error }}</span>
    </p>
    <p>班级:
        <select name="class_id">
            {% for row in classes %}
                <!--如果学生表的班级id等于班级表的id,就选中该学生所在的班级显示出来-->
                {% if students.class_id == row.id %}
                    <option selected value="{{ row.id }}">{{ row.title }}</option>
                {% else %}
                    <option value="{{ row.id }}">{{ row.title }}</option>
                {% endif %}
            {% endfor %}
        </select>
    </p>
    <p>
        <input type="submit" value="提交">
        &nbsp;&nbsp;&nbsp;
        <a href="/students/">取消</a>
    </p>
</form>
</body>

 

猜你喜欢

转载自www.cnblogs.com/python-daxiong/p/12651805.html