day89-django-学员管理之班级列表的增删改查

1、创建django项目之后,settings设置:

  1.1 注释掉# 'django.middleware.csrf.CsrfViewMiddleware',

  1.2 静态文件设置:添加static文件夹

      STATIC_URL = '/static/'

      STATICFILES_DIRS = (  os.path.join(BASE_DIR,'static'),  )  #逗号不能漏,这是元祖

2、urls设置:

  


3.views.py
from django.shortcuts import render,redirect
import pymysql

#班级列表
def classes(request):
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('select id,title from classes')
result = cursor.fetchall()#获取数据库数据,[{k1:v1},{k2:v2},{k3:v3}]
cursor.close()
conn.close()

return render(request,'classes.html',{'result':result})#html的特殊字符result跟获取到的数据库的数据result进行替换


#增加班级名称
def add_class(request):
if request.method == 'GET':
return render(request,'add_class.html')
else:
v = request.POST.get('title')
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('insert into classes(title) values(%s)',[v])
conn.commit()
# result = cursor.fetchall()这里结果是空元祖,无法获取数据,因为前面已经使用
# 过一次fetchall,数据取完就没有了,所以前面要把数据放在变量里面方便操作。
cursor.close()
conn.close()
# 直接跳转到班级列表页面。
return redirect('/classes/')#浏览器收到这个url之后,重定向(重新向服务器发一次请求),
#服务器执行classes函数返回班级列表页面。

#删除班级名称
def del_class(request):
nid = request.GET.get('nid')
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('delete from classes where id=%s',[nid])
conn.commit()
cursor.close()
conn.close()

return redirect('/classes/')

#编辑班级名称:
def edit_class(request):
if request.method == 'GET':
#先获取数据库的对应行的班级名称(字典),然后替换模板的特殊字符,最后返回给浏览器,
# 浏览器就有默认的班级名称。
nid = request.GET.get('nid')
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('select id,title from classes where id=%s', [nid])
result = cursor.fetchone()#fetchone获取的是字典,{'id': 1, 'title': '全栈1期'}
print(result)
cursor.close()
conn.close()
#点编辑,弹出另外一个页面,用于修改班级名称
return render(request,'edit_class.html',{'result':result})

else:
nid = request.GET.get('nid')
title = request.POST.get('title')
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('update classes set title=%s where id=%s', [title,nid])
conn.commit()
cursor.close()
conn.close()

return redirect('/classes/')


4.classes.html
<body>
<h1>班级列表</h1>
<a href="/add_class/">添加</a>
<table>
<thead>
<tr>
<th>ID</th>
<th>班级名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for row in result %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.title }}</td>
<td><a href="/edit_class/?nid={{ row.id }}">编辑</a>
|
<a href="/del_class/?nid={{ row.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
5.add_class.html
<body>
<h1>添加班级</h1>
<!-- 点提交,页面url就变成add_class,跟a标签的"添加"的url一样,服务器对应的add_class函数
会做判断,当添加时就是GET,提交时就是POST-->
<!-- request.POST这个字典的key就是name也就是title,value是输入的值 -->
<form method="POST" action="/add_class/">
<p>班级名称:<input type="text" name="title"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>

6.edit_class.html
<body>
<h1>编辑班级</h1>
<!-- ?nid={{ result.id }}这是字典,服务器通过request.GET.get(nid)获取 {{ result.id }}-->
<form method="POST" action="/edit_class/?nid={{ result.id }}">
<p>班级名称:<input type="text" name="title" value="{{ result.title }}"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>





原文地址:https://www.cnblogs.com/python-daxiong/p/12622992.html