Django——Django 中视图(view)的实现原理

Django 中的视图(View)

​ 在 Django 的 MVT 模型中,视图 View 属于 V 层,类似于 MVC 模型中的 C,Controller 层,用来接收前端发出的请求,进行处理后再将结果返回给前端

​ 视图通过在 app 中的 view.py 文件中实现,实际上视图就是一个个实现网站功能的函数,负责连接 M(模型层)和 T(模板层),实现前后台之间的数据流动

视图工作的原理

​ 想要学会使用视图,首先要了解视图工作的原理,我们从 Django 如何触发视图、和如何编写视图中函数来说

触发

​ 首先,想要运行视图中写好的逻辑代码,那么视图是怎么和前端网页产生联系的呢?

​ 这里要从项目名文件夹下的 urls.py 文件说起,Django 的工作机制是通过浏览器地址栏中地址的变化来与视图连接的,我们可以看到,urls.py 文件有如下代码

urlpatterns = [
    path('admin/', admin.site.urls),
]

​ 不知道大家对 admin 是否还有印象,我们进入 Django 的 admin 页面时是在项目地址后加入/admin来进入的,这也说明了 Django 的工作原理:

​ Django 是通过地址栏的变化,先在项目中的 urls.py 文件中寻找匹配地址栏的信息,再到 app 下的 urls.py 文件中匹配,我们通过url(path, include(app 的 urls))函数来指引项目找到 app 中的 urls.py,代码如下,我的 app 名为 login:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url

urlpatterns = [
    path('admin/', admin.site.urls),
    # 包含 login 中的 urls 文件
    url(r'^', include('login.urls')),
]

​ urls.py 的url函数中,第一个参数是一个字符串,用来匹配地址栏中项目启动地址后的字符,即如果项目启动地址是127.0.0.1:8080,那么它匹配的就是 8080 后紧跟着的字符串,第二个参数是使用include()函数指引的 app 中的 urls.py 文件,我们通过它的指引找到指定 app 中的 urls.py

r'^'代表匹配任意字符的正则表达式,意思是不管 8080 后接的是什么字符,项目都会去到后边include('app,urls')中指定的 app 的 urls.py 文件中寻找

​ 随后我们在刚刚指定的 app 下创建 urls.py 文件,假设我们要在视图中实现一个index函数,并希望当浏览器地址栏为/index时触发它,就在 app 下的 urls.py 文件中写下如下代码:

from django.conf.urls import  url
from login import views

urlpatterns = [
    # 通过 url 函数设置 url 路由配置项
    # 建立 /index 和视图 index 之间的关系
    url(r'^index$', views.index),
]

​ 这里必须使用名为urlpatterns的列表来进行视图的配置,同样使用url函数,第一项依然是要匹配的地址栏字符串,第二项变为当前 views.py 文件中的函数名,这里函数名后不写(),这里还需要注意的是,地址栏的字符串到这里已经是二次过滤了,也就是说在之前如果被过滤的字符,就不是这次过滤的范畴了

视图函数的编写

​ 下面我们来实现这个index函数,在 app 下的 views.py 中写如下函数:

def index(request):
    # request 是 HttpRequest 对象的一个参数
    # 进行处理,和 M(数据库) 和 T(模板) 进行交互
    # 最终要返回 HttpResponse 对象
    return HttpResponse('Hello World')

​ 这些代码的功能就是在浏览器中打印一个 Hello World,我们主要说一说这个函数的编写流程

​ 首先,views/py 中的函数,必须带有request参数,它会从前端接收数据信息,而这些函数最后要给浏览器返回一个 HttpResponse 对象(需要from django.http import HttpResponse),这就是视图函数的大致工作流程

发布了39 篇原创文章 · 获赞 44 · 访问量 4654

猜你喜欢

转载自blog.csdn.net/scfor333/article/details/104255767
今日推荐