Django框架——进阶之视图系统(View.py)

Django框架之View.py(视图文件)

视图简介

视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面。

它对外接收用户请求,对内调度模型层和模版层,统合数据库和前端,最后根据业务逻辑,将处理好的数据,与前端结合,返回给用户。视图层是真正的后端,是Python工程师的‘主营业务’。

视图就是每个创建的APP中的的view.py文件夹。我们处理数据的那些业务逻辑,就都存放(编辑)在这里。

Django的视图层包含下面一些主要内容:

  1. URL路由
  2. 视图函数
  3. 快捷方式
  4. 装饰器
  5. 请求与响应
  6. 类视图
  7. 文件上传
  8. CSV/PDF生成
  9. 内置中间件

注意:视图层应该包含视图文件(view.py)路由文件(urls.py)两个系统组成。

  

一个最新建的Django APP ,新建的APP名称为(app001)如下:

一个简单的视图

下面是一个以HTML文档的形式返回当前日期和时间的视图:
复制代码
from django.http import HttpResponse
from django.shortcuts 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)
复制代码

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

  • 首先,我们从 django.http(或者django.shorcuts)模块导入了HttpResponse类,以及Python的datetime库。

索引上面的两个from引入语句的功能是一样的,只需要其中一条就可以了!!!!!

  • 接着,我们定义了current_datetime函数。它就是视图函数

  • 每个视图函数都使用接收到的HttpRequest对象作为第一个参数,并且通常称之为request

  • 注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够比较准确地反映出它实现的功能(唯一性)。

  • 这个视图会返回一个HttpResponse对象,其中包含生成的响应(HTML页面或者一个字符串)。

  • 每个视图函数都负责返回一个对象,可以是HttpResponse对象,也可以render对象,还可以是redirect对象。  

    所以,我们可以将上面的from引入语句修改得全一点,如下:   

from django.shortcuts import render, HttpResponse, redirect

    在平时的开发中,我们也会称 render, HttpResponse, redirect  这三个为 “ 基础必配三件套 ”  

    注意,HttpResponse是一个类,而render和redirect是Django的内置函数!

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

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

每个视图负责返回一个HttpResponse对象给浏览器。

视图函数的前奏(FBV和CBV)

什么是FBV?   在视图文件里面编辑的时候,基于函数的形式来编辑业务逻辑的视图view,就叫做FBV (function base view)。

什么是CBV?   而在编辑业务逻辑的时候,基于类的形式来编辑业务逻辑的则是叫做CBV(class base view)。

下面用一个简单的例子来说明:

使用FBV写:

from django.shortcuts import render, HttpResponse, redirect

def back_hello(request):
    return HttpResponse('大家好!')

使用CBV写:

from django.views import View    # 基于类的形式来写试图上的业务逻辑的时候,定义的类需要  继承 django 中的View类  !!!!!!!
class BackHello(View):
    def get(self, request):
        return HttpResponse("get请求的时候!get大家好!")

    def post(self, request):
        return HttpResponse("post请求的时候!post大家好!")

注意:使用CBV形式的时候,urls.py上的路径与函数的对应关系,是与FBV不一样的,需要修改,如下:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/', views.BackHello.as_view()),
]

# 可以看出,test/位置中的路径写法与FBV一样,时候后面的引入格式变成了:
# views.类名.as_view()。而CBV情况下是写为: views.函数名
# 注意:as_view(),这个是固定的!!!!

猜你喜欢

转载自www.cnblogs.com/mashangsir/p/11468420.html
今日推荐