Django视图层:视图函数、视图类

一、视图层The view layer

Django 具有 “视图” 的概念,负责处理用户的请求并返回响应。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、视图函数 View functions

mysite/views.py下,Create views

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

def index(request):  # 视图函数负责处理业务逻辑,request对象封装所有请求信息
    print(request)
    return HttpResponse("我的首页呀,哈哈")

我们逐行逐句地分析一遍这段代码:
1、首先,我们从 django.http 模块导入(import) HttpResponse 类。参阅附录 H 了解更多关于 HttpRequest 和 HttpResponse 的细节。 我们需要导入这些类,因为我们会在后面用到。
2、接下来,我们定义一个叫做index的视图函数。
每个视图函数至少要有一个参数,通常被叫作request。 这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,我们虽然不用request做任何事情,然而它仍必须是这个视图的第一个参数。
注意视图函数的名称并不重要;并不一定非得以某种特定的方式命名才能让 Django 识别它。 在这里我们把它命名为:index,是因为这个名称清晰的显示了视图的用意。同样地,你可以用诸如:index_wonderful_beautiful_world,这样难看的短句来给它命名。 在下一小节,将告诉你Django是如何找到这个函数的。
3、这个函数只有简单的一行代码: 它仅仅返回一个HttpResponse对象,这个对象包含了文本“我的首页呀,哈哈”。

在myproject/urls下,mapping URL to views

from django.urls import path

from mysite import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path("index/", views.index)  # views.index是一个函数
    ]

URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。

让我们逐行解释一下代码:
1、第一行导入from django.urls import path下的模块,它们是Django URLconf的基本构造。 这包含了一个urlpatterns函数。
2、第二行调用path() 函数并将返回结果保存到 urlpatterns 变量。urlpatterns是一个列表,元素是path()元组,path()函数:def _path(route, view, kwargs=None, name=None, Pattern=None)
在这里插入图片描述
小结:页面的内容是靠view function(视图函数) 来产生,URL定义在 URLconf 中。

三、视图类 class-based view

在mysite/views下,

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.views import View

def index(request):  # 视图函数负责处理业务逻辑,request对象封装所有请求信息
    print(request)  # 视图函数第一个参数必为request
    return HttpResponse("我的首页呀,哈哈")

class myview(View):  # 视图类第一个参数比为视图父类View
    def get(self, request):  # 定义一个类方法
        return HttpResponse("这是基于类的视图实现方式")

在myproject/urls.py下,

from django.contrib import admin
from django.urls import path

from mysite import views
from mysite.views import myview
urlpatterns = [
    path('admin/', admin.site.urls),
    path("index/", views.index),
    path("login/", myview.as_view())

]

或者,

from mysite import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path("index/", views.index),
    path("login/", views.myview.as_view())  # myview.as_view(),是一个类

]

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47008635/article/details/115273777