三、View简介

View是Django中重要的存放程序逻辑的地方,基本上一个网站的大部分的程序设计都存放在这里面。
这里存放了许多我们需要操作的函数,在这些函数中把我们需要操作的数据按请求传送给网页服务器或者交给Template中渲染后再送到网页服务器中。最后,再有urls.py中相应的设计进行对应的派发。

1、建立简单的HttpResponse网页

如果要直接显示数据到网页上,最简单的步骤是,首先在views.py中建立一个函数存放显示数据的逻辑,其次在urls.py中建立网址和程序(函数)的对应关系,最后通过HttpResponse传送出想要显示的数据。举个简单的例子,views.py中的Post函数和urls.py中对应关系如下:
views.py中:

from django.http import HttpRespons
from APP.models import classname 
def Post(request):
	a = classname.objects.all()
	return HttpResponse(a)

注:这里的request参数是网页浏览器传递过来的请求,a为需要显示的变量。

如果我们把Post这个函数在主页中显示出来,则在urls.py中对应为:

from django.urls import path
from django.contrib import admin
from APP.views import Post
urlpatterns = [
	path('admin/', admin.site.urls)      #管理员页面
	path('', Post)      #Post显示的主页面
]

另外我们在这里也会用到 { { } } 来绑定对应的数据对象。

2、网址栏参数处理的方式

如果我们要显示某一个指定的对象,我们应该怎么做?首先,我们在views.py中设置的函数必须能够接受一个能够寻找指定对象的参数。其次就是在urls.py中的网址对应处也要有能力传送参数到views.py中去。
例如 views.py 中定义了:

def showpost(request, slug):
    try:
        post = Post.objects.get(slug=slug)
        if post != None:
            return render(request, 'post.html', locals())
    except:
        return redirect('/')

我们在 showpost 中多添加了一个 slug 参数 用来传递对应的网址信息,通过 .objects.get(slug=slug) 来搜索 slug,如果搜索不到就通过 return redirect(’ / ') 来返回根目录。那如何将 slug 这个参数传送到 showpost 这个函数中来呢?
这里就通过在 urls.py 中添加的代码来实现:

path('post/<slug:slug>/', showpost),

通过在post/后面添加的 <slug:slug> 来实现网址的委派。意思是,把要传送的内容存放在名称为 slug 的变量里面,且传送内容的类型为 slug 类型 。
post/<slug:slug> 的意思是,如果网址栏上出现了 /post/ 开头的字符串并且放到了slug当中,就把这个字符串提取出来作为参数传递给 showpost 函数。