Django的视图层

视图函数

所谓视图函数,其实就是我们Django项目中各个应用中的views.py文件中定义的每个用来处理URL路由映射到这里的逻辑函数。一个视图函数简称视图,它是个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片,任何东西都可以。但是需要注意的是,无论视图本身包含什么逻辑,都要返回响应。
下面是一个返回当前日期和时间作为HTML文档的视图:
from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
import datetimedef current_datetime(request):now = datetime.datetime.now()html = "<html><body>It is now %s.</body></html>" % nowreturn HttpResponse(html)
在上面的代码中:
1.首先,我们从django.shortcuts模块导入了HttpResponse类,以及Python的datetime库。
2.接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。但是视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。
3.这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。
在视图层我们需要掌握两个对象:请求对象(HttpRequest)响应对象(HttpResponse)

请求对象

请求对象的常用属性

django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性。 除了特殊说明的之外,其他均为只读的。
1.请求方式:request.methon:一般情况下,在浏览器的地址栏直接访问时是GET,用form的submit提交的方式是POST。
2.请求数据:request.GET与request.POST:这两个方式哪一个有值,完全取决于请求的方式。这里需要注意的是得到的结果是一个“字典”。对于Get请求方式,如果浏览器的地址栏输入的是:http://127.0.0.1:8000/app01/index/?name=whw&age=22,那request.GET得到的结果是{'name':'whw','age':'22'}。而对于POST请求方式,字典的key值是表单中input的name属性的值,而对应的value是input中用户输入的值。
3.请求路径:request.path:请求路径的组成是:协议://IP:port/路径?参数(GET请求数据)。比如说有一个GET请求http://127.0.0.1:8000/app01/index/?name=whw&age=22,那这个请求答应出来的路径就是/app01/index/。大家不要被后面的迷惑了,因为index后面是"?",我们可以把它看作是路径与参数的分隔符,所以我们打印路径的时候是不会打印"?"后面的参数的!

请求对象的常用方法

1.get_full_path()方法:关于这个方法我们需要注意一点就可以了,还拿上面的“请求数据”中的例子来讲,如果GET请求方式输入:http://127.0.0.1:8000/app01/index/?name=whw&age=22。path属性得出的只是/app01/index/get_full_path()方法得出的是:/app01/index/?name=whw&age=22
2.is_ajax()方法——判断请求是不是ajax方法。

响应对象

我们知道,对于任何一个视图函数必须要返回响应对象,而返回的响应对象主要有三种形式:HttpResponse()render()redirect()。另外需要注意的一点是,调用者三个方法前需要先在views.py文件中引入:from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect

HttpResponse()

对于HttpResponse(),它比较简单,因为我们在括号内直接加一个字符串作为响应体就可以了。我们可以拿上面的“返回当前日期和时间作为HTML文档”的例子作为参考。

render()

render()是一个很重要的方法。它的作用是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体返回给用户。
render()的语法是:render(request, template_name[, context])。合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象。
render()的参数介绍:
(1)request:用于生成响应的请求对象。
(2)template_name:要使用的模板的完整名称,可选的参数
(3)context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
例如,我们现在用render()方法实现“返回当前时间”的功能,视图函数可以这样写(路由控制部分省略):
def index(request):import datetimen = datetime.datetime.now()now = n.strftime('%Y-%m-%d:%X')return render(request,'index.html',{'datetime':now})
模板文件index.html中的内容为:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h4>当前时间:{{ ctime }}</h4></body>
</html>
需要注意的是:浏览器并不认识模板语法,render方法找到index.html文件之后,它先检查里面有没有模板语法,如果有模板语法先将传入的值做“替换”,就是将视图中字典{'datetime':now}中datetime键对应的value值now作为参数传给浏览器,传完参数之后index.html才是一个html文件了,然后render再将html文件那一堆东西传给浏览器,所以浏览最后显示的是now的值。这个“替换”的过程十分重要,请大家务必理解并掌握!

redirect()——重定向

我们可以传递要重定向的一个硬编码的URL:
def my_view(request):...return redirect('/some/url/')
也可以是一个完整的URL:
def my_view(request):...return redirect('http://example.com/')
对于重定向的使用场景,这里做了一下三点小结:
(1)网站调整(如改变网页目录结构)。
(2)网页被移到一个新地址。
(3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
对于有关重定向状态码301302的区别说明如下:
1.共同点:301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)
2.不同点:301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

转载于:https://www.cnblogs.com/paulwhw/p/9375766.html

Django的视图层简介相关推荐

  1. 计算机毕业设计中Python Django 框架目录结构简介

    MVC架构 model 模型 用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是web程序中用于处理应用程序的数据逻辑部分,model是提供功能性的接口,通过这些接口可以获取model的功能 ...

  2. django ajax 更新表格_Django(反向解析,路由分发、名称空间、视图层、虚拟环境、Django版本、json,CBV)...

    https://www.zhihu.com/video/1249117508688711680 每日测验 """ 今日考题 1.列举你知道的orm数据的增删改查方法 2. ...

  3. Django - - - -视图层之视图函数(views)

    阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 1.HttpRequest 2.HttpResponse 1.render 函数 2.redirect 函数 对比rende ...

  4. django redirect传递参数_Django 视图层(四):视图函数 - views.py

    介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图 ...

  5. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

  6. Django之路由层

    天行健,君子以自强不息 -周易 文章目录 路由层 一.路由层之路由匹配 1.什么是路由 2.路由匹配 URL( )方法 基本格式: 参数介绍: regex: view: kwargs name 示例: ...

  7. Django之模板层

    视图层后续: FBV与CBV FBV:是基于函数的视图 我们前面写视图都是用函数写的,也就是FBV CBV:是基于类的视图 urls.py中: url(r'^login/',views.MyLogin ...

  8. Django MTV - 模型层 - (专题)知识要点与实战案例

    Django- 模型层(models)知识要点与实战案例 (专题概述及索引) 概述:本专题以讨论Django中模型层相关的基础知识,这些基础知识在我们的日常开发中有着相当重要的作用.模型(models ...

  9. django框架——模型层(下)

    系列文章目录 第一章 django安装与介绍 第二章 django基础使用 第三章 路由层 第四章 虚拟环境.django版本区别.视图层 第五章 模板层 第六章 模型层(上) 第七章 模型层(下) ...

最新文章

  1. 记一次 react 15.3.1 老项目升级到 react 16.7.0 之路
  2. power iso linux启动盘,Power ISO Maker/ISO燃烧到磁盘工具 V3.0版
  3. DataWorks百问百答01:数据同步该用什么资源组
  4. dhcp服务器显示2个ip,下列关于Windows 2003系统DHCP服务器的描述中,错误的是( )。A.DHCP服务器负责多个网段IP地址分配_考题宝...
  5. macOS 使用手册
  6. git--常用小命令
  7. python字符串find_Python字符串find()
  8. 【记录】帮同学做的一个函数拟合
  9. 软件测试管理的基本要素
  10. 【在esp32的3D打印机主板上配置marlin固件OLED】
  11. 编辑器——sublime
  12. 公众号微信认证(企业类型的订阅号)参考步骤
  13. 【图解CAN总线】-2-详述CAN总线电平
  14. c++11新特性介绍
  15. 菜鸟日记(yzy):集成Ucrop裁剪图片架构,并创建管理类使用
  16. CG100具体功能介绍
  17. 极客日报:iPhone 13或有8款配色;vivo百万年薪招工程师;特斯拉新增行车记录视频紧急情况自动保存功能
  18. 使用着色器模拟雾效果
  19. JavaWeb基础系列(八)商城后台增删改查
  20. 联想android模拟器,联想模拟器 v7.3.0 精简版

热门文章

  1. 互联网协议IP抓包分析 -- wireshark
  2. XCTF-Reverse:re1
  3. eclipse安装m2e.sourcelookup插件debug第三方源码(spring)
  4. SYSCALL_DEFINE含义
  5. OpenGL生成的法线贴图并增加光照
  6. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
  7. 嵌入式面试知识点总结 -- ARM篇
  8. Yolo-将coco数据集中的json文件转为txt且解决类别不连续问题
  9. 复制字符串小程序笔记
  10. Android Binder Driver缺陷导致定屏问题分析