创建详细过程
添加图书
通过get或者post请求方式将参数写入到数据库中,
在views.py文件下编写视图函数
def add(request):
# 新增图书
if request.method == 'GET':
return render(request,'book/add.html')
else:
# 从表单中获取相应参数
bookinfo=BookInfo()
bookinfo.bname=request.POST.get("bname")
bookinfo.bpub_date=request.POST.get("bpub_date")
bookinfo.bpage=request.POST.get("bpage")
# 保存信息
bookinfo.save()
return redirect("/book/index")
在urls.py添加相应路径
url(r"^add",add),
在相应的index.html文件下加入连接
<a href="/book/add">添加</a>
创建一个add.html文件在页面上填写添加的数据内容
<form action="/book/add" method="post">
书名:<input type="text" name="bname"><br>
出版日期:<input type="text" name="bpub_date"><br>
页码:<input type="text" name="bpage">
<button>提交</button>
</form>
删除图书
逻辑: 数据通过渲染模板渲染到页面上, 通过获取图书的id值, 返回到删除函数执行软删除 ( 即把对应的图书的删除标记进行更改,并不是真正的把数据从数据库了删除 )
在index.html页面上做相应的修改,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/book/add">添加</a>
<ul>
{%for book in books%}
<li>{{book.bname}}---- <a href="/book/delete/{{book.id}}">删除</a></li>
{% endfor %}
</ul>
</body>
</html>
视图函数, 通过返回的id值获取book对象,执行操作
# 删除图书
def delete(request,bid):
try:
# 1.通过bid来查找book
book = BookInfo.objects.get(id=bid)
# 2.删除
book.is_delete=1
book.save()
except Exception as e:
print("异常",e)
return HttpResponseRedirect("/book/index")
对应的urls.py也要进行修改
url(r"^delete/(\d+)",delete),
修改图书
逻辑: 通过get或post请求方式获取也面提交的表单信息 ,在通过相应的id值找到相应的book数据,通过update方法对数据进行修改
视图函数对应代码:
def edit(request):
if request.method == 'GET':
id=request.GET.get("id")
book=BookInfo.objects.get(id=id)
return render(request,"book/edit.html",{'book':book})
else:
# 获取表格请求传上去的值
id = request.POST.get("id")
bname = request.POST.get("bname")
bpage = request.POST.get("bpage")
bpub_date = datetime.strptime(request.POST.get('bpub_date'),'%Y年%m月%d日').strftime('%Y-%m-%d')
# 更改数据库的信息
BookInfo.objects.filter(id=id).update(bname=bname,bpage=bpage,bpub_date=bpub_date)
return HttpResponseRedirect('/book/index')
相应的分路由
url(r"^edit",edit),
对应的edit.html内容如下:
<form action="/book/edit" method="post">
<input type="hidden" name="id" value="{{book.id}}">
书名:<input type="text" name="bname" value="{{book.bname}}"><br>
出版日期:<input type="text" name="bpub_date" value="{{book.bpub_date}}"><br>
页码:<input type="text" name="bpage" value="{{book.bpage}}">
<button>提交</button>
</form>
在index.html页面上创建对应的修改的标签,通过(?id=)的方式传递id值,
<a href="/book/edit?id={{book.id}}">修改</a>
注意:在提交表单时,要注释掉settings.py中的 MIDDLEWARE 的 crsf 内容
补充内容 — 错误视图
Django框架有自带的默认视图应用于处理HTTP错误请求 如404视图,500视图
404错误:
在http响应过程中遇到404相应错误时,在Django中直接访问当前Django应用的服务器下一个错误的url地之后或默认显示一个404错误页面,
(1)对于默认404的视图,可以传递一个默认的变量request_path给模板,request_path表示导致错误的url地址信息
(2)若是在项目下settings中的DEBUG变量设置为True,那么将不会调用404视图,而是显示urlconf并带有已协调试信息,因此,需要把True变为False,还需要改变ALLOWED_HOSTS为任何url
DEBUG = True
ALLOWED_HOSTS = ['*']
defaults.page_not_found(request,template_name='404.html')
注意:通常在调试代码时,我们都不需要修改 DEBUG、ALLOWED_HOSTS 的值,但若不想让实际用户查看到 开发时的调试信息,我们一般会在实际部署及发布项目时,将 DEBUG、ALLOWED_HOSTS 项修改为上述值
也可以在templates中创建一个自定义的404页面,但该文件的命名必须为404.html,且必须是在templates目录下直接创建,500错误视图同上