目录
0、先在数据库中写入测试数据:
insert into app01_department(title) value("IT部门"),("销售部门");
结果发生报错:
原因:
建表时,没有设置中文字符(utf8)
修改:
alter table 表名 convert to character set utf8;
友情链接:
ERROR 1366 (HY000): Incorrect string value 解决方案_Acloasia的博客-CSDN博客
插入成功:
查看:
1、将部门列表从数据库加载到前端页面
views.py:
from django.shortcuts import render
from app01 import models
# Create your views here.
def depart_list(request):
"""部门列表"""
#1、从数据加载数据
#qureyset类型=>列表[对象,对象,对象……]
qureyset = models.Department.objects.all()
return render(request,'depart_list.html',{'qureyset':qureyset})
depart_list.html:
{% for obj in qureyset %}
<tr>
<th>{
{ obj.id }}</th>
<td>{
{ obj.title }}</td>
<td>
<a class="btn btn-primary btn-xs">编辑</a>
<a class="btn btn-danger btn-xs">删除</a>
</td>
</tr>
{% endfor %}
访问首页
2、制作添加页面
(1)常用快捷键:
快速注释 :ctrl+/
快速对齐:ctrl+alt+L
(2)基本制作流程:
先写url,
再写视图函数,
然后构建模板,
最后实现逻辑功能。
(3)添加页面
urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
#部门列表
path('depart/list/', views.depart_list),
#部门添加
path('depart/add/', views.depart_add),
]
views.py
from django.shortcuts import render
from app01 import models
# Create your views here.
def depart_list(request):
"""部门列表"""
#1、从数据加载数据
#qureyset类型=>列表[对象,对象,对象……]
qureyset = models.Department.objects.all()
return render(request,'depart_list.html',{'qureyset':qureyset})
def depart_add(request):
"""添加部门"""
return render(request,'depart_add.html')
depart_add.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
<style>
.navbar {
border-radius: 0;
}
</style>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">联通用户管理系统</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/depart/list">部门管理</a></li>
<li><a href="/depart/list">Link</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">登录</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">代码骑士 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">个人资料</a></li>
<li><a href="#">我的信息</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">注销</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!--添加部门表单-->
<div>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"> 新建部门 </h3>
</div>
<div class="panel-body">
<form>
<div class="form-group">
<label> 标题 </label>
<input type="text" class="form-control" placeholder="标题" name="title"/>
</div>
<button type="submit" class="btn btn-primary"> 提交 </button>
</form>
</div>
</div>
</div>
</div>
<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>
访问网页
3、实现添加功能
代码:
views.py
def depart_add(request):
"""添加部门"""
#1、处理请求
if request.method == "GET":
return render(request,'depart_add.html')
#获取用户提交的POST请求(暂时不考虑title为空的情况,后面有简单方法处理)
title = request.POST.get("title")
#2、保存到数据库
models.Department.objects.create(title=title)
#3、从定向回到部门列表
return redirect("/depart/list/")
depart_add.html
<!--表单-->
<form method="post"><!--action可以不写,因为不写的话提交的是当前地址-->
{% csrf_token %}
<div class="form-group">
<label> 标题 </label>
<input type="text" class="form-control" placeholder="标题" name="title"/>
</div>
<button type="submit" class="btn btn-primary"> 提交 </button>
</form>
测试:
添加:
成功:
数据库:
4、实现删除功能
urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
#部门列表
path('depart/list/', views.depart_list),
#部门添加
path('depart/add/', views.depart_add),
#部门删除
path('depart/delete/', views.depart_delete),
]
views.py
def depart_delete(request):
"""删除部门"""
#1、获取id
#通过get请求得到url的参数实现删除http://127.0.0.1:8000/depart/delete/?nid=1
nid = request.GET.get("nid")
#2、删除
models.Department.objects.filter(id=nid).delete()
# 3、重定向回到部门列表
return redirect("/depart/list/")
修改depart_list.html
{% for obj in qureyset %}
<tr>
<th>{
{ obj.id }}</th>
<td>{
{ obj.title }}</td>
<td>
<a class="btn btn-primary btn-xs">编辑</a>
<a class="btn btn-danger btn-xs" href="/depart/delete/?nid={
{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
测试
删除
数据库
successfully!
5、实现编辑功能
***使用Django的URL特殊传参方法
urls.py
#部门修改
#http://127.0.0.1:8000/depart/1/edit/
#http://127.0.0.1:8000/depart/2/edit/
#http://127.0.0.1:8000/depart/3/edit/
#……
path('depart/<int:nid>/edit/', views.depart_edit),
]
views.py
def depart_edit(request,nid):
"""部门修改"""
return render(request,'depart_edit.html')
depart_list.html
<a class="btn btn-primary btn-xs" href="/depart/{
{ obj.id }}/edit/">编辑</a>
实现代码:
urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
#部门列表
path('depart/list/', views.depart_list),
#部门添加
path('depart/add/', views.depart_add),
#部门删除
path('depart/delete/', views.depart_delete),
#部门修改
#http://127.0.0.1:8000/depart/1/edit/
#http://127.0.0.1:8000/depart/2/edit/
#http://127.0.0.1:8000/depart/3/edit/
#……
path('depart/<int:nid>/edit/', views.depart_edit),
]
views.py
def depart_edit(request,nid):
"""部门修改"""
if request.method == "GET":
# 根据nid,获取想要编辑的一行对象
row_object = models.Department.objects.filter(id=nid).first()
# print(row_object.id,row_object.title)
return render(request, 'depart_edit.html', {"row_object": row_object})
#如果用户传递过来一个post请求
#1、获取用户提交的title
title = request.POST.get("title")
#2、根据id到数据库中的数据进行更新
models.Department.objects.filter(id=nid).update(title=title)
#3、重定向用户列表
return redirect("/depart/list/")
depart_list.html
{% for obj in qureyset %}
<tr>
<th>{
{ obj.id }}</th>
<td>{
{ obj.title }}</td>
<td>
<a class="btn btn-primary btn-xs" href="/depart/{
{ obj.id }}/edit/">编辑</a>
<a class="btn btn-danger btn-xs" href="/depart/delete/?nid={
{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
depart_edit.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
<style>
.navbar {
border-radius: 0;
}
</style>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">联通用户管理系统</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/depart/list">部门管理</a></li>
<li><a href="/depart/list">Link</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">登录</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">代码骑士 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">个人资料</a></li>
<li><a href="#">我的信息</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">注销</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!--添加部门表单-->
<div>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"> 修改部门 </h3>
</div>
<div class="panel-body">
<!--表单-->
<form method="post"><!--action可以不写,因为不写的话提交的是当前地址-->
{% csrf_token %}
<div class="form-group">
<label> 标题 </label>
<input type="text" class="form-control" placeholder="标题" name="title" value="{
{ row_object.title }}"/>
</div>
<button type="submit" class="btn btn-primary"> 提交 </button>
</form>
</div>
</div>
</div>
</div>
<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>
测试:
修改
完成
数据库