网络编程
位置:首页>> 网络编程>> Python编程>> Django视图函数的具体使用

Django视图函数的具体使用

作者:zx  发布时间:2023-07-25 11:02:54 

标签:Django,视图函数

视图是 MTV 设计模式中的 V 层,它是实现业务逻辑的关键层,可以用来连接 M 层与 T 层,起着纽带般的作用,在《Django MTV和MVC的区别》中也做了相应的介绍,所以它的重要性可想而知。

1. 第一个视图函数

在 Django 中,视图函数是一个 Python 函数或者类,开发者主要通过编写视图函数来实现业务逻辑。视图函数首先接受来自浏览器或者客户端的请求,并最终返回响应,视图函数返回的响应可以是 HTML 文件,也可以是 HTTP 协议中的 303 重定向。接下来编写一个简单的视图函数:


from django.http import HttpResponse
def Hello_my_django(request):
return HttpResponse('<html><body>Hello my Django</body></html>')

下面针对以上 3 行代码做解析:

1)HttpResponse视图响应类型
从 django.http 模块中导入 HttpResponse,从它简单的名字我们可以得知,它是一种视图的响应类型。

在HttpResponse对象上扩展的常用方法:

  • - 页面渲染:render(推荐),render_to_response,

  • - 页面跳转:redirect

  • - locals: 可以直接将对应视图函数中所有的变量传给模板

2)视图函数参数request
我们定义了一个名为“Hello_my_django”的函数,Django 规定了,视图函数至少有一个参数,第一个参数必须是 request,request 是 HttpRequest 请求类型的对象,它携带了浏览器的请求信息,所以视图函数的第一个参数必须为 request。

当请求一个页面时,Django 创建一个 HttpRequest对象包含原数据的请求。然后 Django 加载适当的视图,通过 HttpRequest作为视图函数的第一个参数。每个视图负责返回一个HttpResponse目标。


path:  请求页面的全路径,不包括域名
method:  请求中使用的HTTP方法的字符串表示。全大写表示。例如
    if req.method=="GET":
       do_something()
    elseif req.method=="POST":
       do_something_else()
GET:   包含所有HTTP GET参数的类字典对象
POST:  包含所有HTTP POST参数的类字典对象
   服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过
   HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
   if req.POST来判断是否使用了HTTP POST 方法;应该使用 if req.method=="POST"
COOKIES:  包含所有cookies的标准Python字典对象;keys和values都是字符串。
FILES:  包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
  name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
  filename:  上传文件名,用字符串表示
  content_type: 上传文件的Content Type
  content:  上传文件的原始内容
user:  是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
   没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
   可以通过user的is_authenticated()方法来辨别用户是否登陆:
   if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
   时该属性才可用
session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
META:  一个标准的Python字典包含所有可用的HTTP头。可用标题取决于客户端和服务器,但这里是一些例子:
  CONTENT_LENGTH  – 请求体的长度(一个字符串)。
  CONTENT_TYPE   – 请求体的类型。
  HTTP_ACCEPT   - 为响应–可以接受的内容类型。
  HTTP_ACCEPT_ENCODING – 接受编码的响应
  HTTP_ACCEPT_LANGUAGE – 接受语言的反应
  HTTP_HOST   – 客户端发送的HTTP主机头。
  HTTP_REFERER   – 参考页面
  HTTP_USER_AGENT  – 客户端的用户代理字符串。
  QUERY_STRING   – 查询字符串,作为一个单一的(分析的)字符串。
  REMOTE_ADDR   – 客户端的IP地址
  REMOTE_HOST   – 客户端的主机名
  REMOTE_USER   – 用户通过Web服务器的身份验证。
  REQUEST_METHOD  – 字符串,如"GET"或"POST"
  SERVER_NAME   – 服务器的主机名
  SERVER_PORT   – 服务器的端口(一个字符串)。

3)return视图响应
视图函数要返回响应内容,这里的响应内容是我们用 HTML 标签编写的,把它作为 HttpResponse 的对象返回给浏览器。

2. 视图函数执行过程

上面视图函数的代码虽然区区几行,但是已经充分体现了视图层的实现过程。 Django 收到请求以后,首先创建一个带有请求信息的 HttpRequset 对象,将 HttpRequest 的对象 request 作为第一个参数传递给视图函数,视图接收参数后继续向下执行,然后选择加载对应的视图,最后返回 HttpResponse 对象给浏览器。

通过本节的介绍,我们应该理解 View 视图函数的作用,以及视图函数的定义过程。

来源:http://c.biancheng.net/view/7347.html

0
投稿

猜你喜欢

  • 我就废话不多说了,直接上代码吧:package mainimport ("flag""fmt"&qu
  • 您是否记得关闭所有的XHTML元素,在HTML中一些元素没有必要被关闭。当下一个元素开始的时候,上一个元素就自动被关闭。XHTML中是不允许
  • 非常好的边框样式设置工具,使用该工具您可以很方便的为DIV设置简单的边框样式,如果放在DW中会更好。会制作DW插件的高手,请帮忙制作成DW插
  • 最近和一程序员合作项目。弄的我头都大了~埋怨我的CSS命名看不懂~得按照他的来。结果我打开他的页面,看了看,从头第一个开始就是content
  •     我们可以利用 Cookie collection 来刪除客户端的Cookies: <%
  • 本来想等到IE8正式发布时再在blog中写段代码,用来提示IE6用户升级到IE8的,不过貌似IE 8已经RTM了,今天又正好看到这个“升级I
  • 在我之前写的几篇网站优化的文章中,着墨最多的是减少HTTP请求。通过减少请求数目,你的浏览器必须能对你的网站所有内容成功检索,总的HTTP请
  • 用mysqldump和source可以使用这种方式导出数据:mysqldump -urott -P5678 --default-charac
  • 1.设置phpMyAdmin Language:Chinese simplified (zh-utf-8)MySQL 字符集:UTF-8 U
  • 网页上的图片如果设置了alt属性,当鼠标移经时就会有tooltip出现,但是只能显示一行文本,有时需要多行文本,乃至图片来显示图片、链接或者
  • 有时我们有很多文件(如图片),我们需要对每一个文件进行操作。 我们还需要一份文件的名字来进行遍历,这时我们首先需要建立一份文件名单,有时还会
  •  Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧。Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性、
  • 本文实例讲述了PHP模板引擎Smarty中变量的使用方法。分享给大家供大家参考,具体如下:一、概述:Smarty 是 PHP 众多模板引擎中
  • 昨天在写“同IP站点查询”工具的时候,需要先用ASP获取查询域名的IP,本来是用WSHSHELL组件,代码如下:<%@LANGUAGE
  • 行高的概念看上去很简单——文字行的高度,其实,行高所涉及到的基础知识,对于今后理解其它属性也很重要。大片密密麻麻的文字往往会让人觉得乏味,因
  • web2.0的标志是Ajax的异步通信的发掘,给我们带来像google map,google suggest 这样令人惊叹的东西。而Ajax
  • 这种问题估计遇到的人不在少数,至少我遇到不下三次了,但每次解决后都没有形成深刻的印象,每次遇到还需要思考很久才能解决。这种情况常见的是这样的
  • PHP SESSION 的存储Session会话存储方式PHP将session以文件的形式存储服务器的文件中,session.save_pa
  • PRD的作用之一在于,保留产品设计初衷,期望达到什么样的目的,起到事后验证的效果。产品初衷需要做到利益最大化,找最大的蛋糕,为最大目标人群服
  • 前言ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。随着框架代码量的增加,一些潜在的威胁也逐渐暴
手机版 网络编程 asp之家 www.aspxhome.com