Django的视图函数

        一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求而且返回Web响应。html

   响应能够是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。django

   不管视图自己包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此以外没有更多的要求了——能够说“没有什么神奇的地方”。为了将代码放在某处,你们约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。编程

 

例如:浏览器

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

 让咱们来逐行解释下上面的代码:app

  • 首先,咱们从 django.http模块导入了HttpResponse类,以及Python的datetime库。编程语言

  • 接着,咱们定义了current_datetime函数。它就是视图函数。每一个视图函数都使用HttpRequest对象做为第一个参数,而且一般称之为request函数

    注意,视图函数的名称并不重要;不须要用一个统一的命名方式来命名,以便让Django识别它。咱们将其命名为current_datetime,是由于这个名称可以比较准确地反映出它实现的功能。spa

  • 这个视图会返回一个HttpResponse对象,其中包含生成的响应。每一个视图函数都负责返回一个HttpResponse对象。code

  Django使用请求和响应对象来经过系统传递状态。csrf

  当浏览器向服务端请求一个页面时,Django建立一个HttpRequest对象,该对象包含关于请求的元数据。而后,Django加载相应的视图,将这个HttpRequest对象做为第一个参数传递给视图函数。

  每一个视图负责返回一个HttpResponse对象。

关于FBV和CBV:

        FBV(function base views) 就是在视图里使用函数处理请求。

    以前都是FBV模式写的代码,因此就不写例子了。

  CBV(class base views) 就是在视图里使用类处理请求。

  Python是一个面向对象的编程语言,若是只用函数来开发,有不少面向对象的优势就错失了(继承、封装、多态)。因此Django在后来加入了Class-Based-View。可让咱们用类写View。这样作的优势主要下面两种:

  1. 提升了代码的复用性,可使用面向对象的技术,好比Mixin(多继承)
  2. 能够用不一样的函数针对不一样的HTTP方法处理,而不是经过不少if判断,提升代码可读性

关于给视图加装饰器:

  • 添加装饰器前必须导入from django.utils.decorators import method_decorator
  • 添加装饰器的格式必须为@method_decorator(),括号里面为装饰器的函数名
  • 给类添加是必须声明name
  • 注意csrf-token装饰器的特殊性,在CBV模式下它只能加在dispatch上面

  下面这是csrf_token的装饰器:

  @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即使settings中没有设置csrfToken全局中间件。

  @csrf_exempt,取消当前函数防跨站请求伪造功能,即使settings中设置了全局中间件。

  注意:from django.views.decorators.csrf import csrf_exempt,csrf_protect

相关文章
相关标签/搜索