zoukankan      html  css  js  c++  java
  • Django的视图函数

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

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

       无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(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)

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

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

    • 接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request

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

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

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

      当浏览器向服务端请求一个页面时,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

  • 相关阅读:
    2008年总结
    感触
    24105
    事情总喜欢蜂拥而至
    最后的稻草
    什么叫服务
    sigh,终于submit了
    在工作和生活的狭缝中生存着
    不应该,不应该
    ren 人 认 忍 韧 仁
  • 原文地址:https://www.cnblogs.com/wangzhilong/p/11081600.html
Copyright © 2011-2022 走看看