一个视图函数(类),简称视图,是一个简单的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。这样作的优势主要下面两种:
关于给视图加装饰器:
下面这是csrf_token的装饰器:
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即使settings中没有设置csrfToken全局中间件。
@csrf_exempt,取消当前函数防跨站请求伪造功能,即使settings中设置了全局中间件。
注意:from django.views.decorators.csrf import csrf_exempt,csrf_protect