视图层之视图函数(views)
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。代码写在哪里也无所谓,只要它在你的Python目录下面。代码放在某处,约定是将视图放置在项目或应用程序目录中的名为teral">的文件中。
函数:
一定包含两个对象:
requset---->用户请求相关的所有信息(对象)
Httpresponse---->响应字符串
一个简单的视图
一个返回当前日期和时间作为HTML文档的视图:
Now =<span style="color: #000000;"> datetime.datetime.Now()
html = <span style="color: #800000;">"<span style="color: #800000;">It is Now %s.<span style="color: #800000;">" %<span style="color: #000000;"> Now
<span style="color: #0000ff;">return HttpResponse(html)
代码:
-
irst">teral">模块导入了teral">类,以及Python的teral">库。
-
irst">teral">函数。函数。函数都使用teral">对象作为第一个参数,并且通常称之为teral">。
函数的名称并不重要;一个统一的命名方式来命名,以便让Django识别它。teral">,是因为这个名称能够精确地反映出它的功能。
视图函数,围绕着两个对象进行:HttpResponse和HttpRequest
1.HttpRequest
request---->请求信息
属性:
request.body #含所有请求体信息 是bytes类型
: 上传文件的类字典对象;FILES中的每一个Key都是标签中 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:filename: <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>名,用字符串表示 content_type: <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的Content Type content: <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的原始<a href="/tag/neirong/" target="_blank" class="keywords">内容</a></span>
<span style="color: #ff0000;">request.user:
<span style="color: #008000;"> 是一个django.contrib.auth.models.User对象,<span style="color: #ff0000;">代表当前登陆的用户。如果访问用户当前
没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
可以通过user的is_authenticated()方法来辨别用户是否登陆:
if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
时该属性才可用
<span style="color: #ff0000;">request.
<span style="color: #000000;"><span style="color: #ff0000;">session: <span style="color: #008000;">唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用request.GET.get('name')<span style="color: #ff0000;"> 拿到GET请求里name的值
<span style="color: #ff0000;">如果某个键对应有多个值,则不能直接用get取值,需要用getlist,如:
<span style="color: #ff0000;">request.POST.getlist("hobby")
请求路径
request.path结果为:/index.html/23
request.get_full_path()结果为:/index.html/23?a=1
方法:
注意:键值对的值是多个的时候,比如checkBox类型的input标签,select标签,需要用:
2.HttpResponse
HttpResponse---->相应字符串
对于HttpRequest请求对象来说,是由django自动创建的,但是,HttpResponse响应对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse响应对象。HttpResponse类在django.http.HttpResponse。
在HttpResponse对象上扩展的常用方法
1.render 函数
指定页面渲染后返回给浏览器
render(request,template_name[,context])
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数: request: 用于生成响应的请求对象。template_name:要使用的模板的完整<a href="/tag/mingcheng/" target="_blank" class="keywords">名称</a>,可选的参数 context:<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a>到模板上下文的<a href="/tag/yige/" target="_blank" class="keywords">一个</a>字典。<a href="/tag/mo/" target="_blank" class="keywords">默</a>认是<a href="/tag/yige/" target="_blank" class="keywords">一个</a>空字典。如果字典中的某个值是可<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>的,视图将在渲染模板之前<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>它。 content_type:<a href="/tag/shengcheng/" target="_blank" class="keywords">生成</a>的文档要使用的MIME类型。<a href="/tag/mo/" target="_blank" class="keywords">默</a>认为DEFAULT_CONTENT_TYPE 设置的值。 status:响应的状态码。<a href="/tag/mo/" target="_blank" class="keywords">默</a>认为200。</pre>
<div class="cnblogs_code">
django.shortcuts <span style="color: #0000ff;">def<span style="color: #000000;"> test(request):
<span style="color: #0000ff;">return render(request,<span style="color: #800000;">'<span style="color: #800000;">index.html<span style="color: #800000;">') <span style="color: #008000;">#<span style="color: #008000;">向用户显示一个html页面
下面为render官方源码,可以看出render最后也是返回了一个HttpResponse给webserver
细说render:
render方法主要是将从服务器提取的数据,填充到模板中,然后将渲染后的html静态文件返回给浏览器。这里一定要注意:render渲染的是模板,下面我们看看什么叫作模板:
上面{%%}之间包括的就是我们要从数据库取出的数据,进行填充。对于这样一个没有填充数据的html文件,浏览器是不能进行渲染的,所以,对于上述{%%}之间的内容先要被render进行渲染之后,才能发送给浏览器。
下面举个例子:

<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>
2.redirect 函数
默认返回一个临时的重定向;teral">可以返回一个永久的重定向。
teral">函数。