Django框架之视图

创建详细过程

添加图书

通过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错误视图同上

上一篇:从0到1 前后分离项目开发实战


下一篇:假币问题(思维题)