Django视图函数的具体使用

时间:2021-08-18 02:11:56

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

1. 第一个视图函数

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

?
1
2
3
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目标。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 视图函数的作用,以及视图函数的定义过程。

到此这篇关于django视图函数的具体使用的文章就介绍到这了,更多相关django视图函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:http://c.biancheng.net/view/7347.html