这次我讲一下我Django中V的理解,欢迎大家斧正
不知道大家知道MVC框架不,其实MTV和MVC是同源的框架,层次划分都很类似,只是说法不同。
Django中:M--model(与数据库相关的),T--template(模板,与页面有关),V--view(与后台程序有关,相当于从控制器)
.NET中:M--model(同上),V--view(视图,与页面有关),C--Controller(控制器,后台程序)
首先,大家想一下,我们的网站应该有URL吧,虽然是本地的服务器上运行,但也是URL啊,那我们怎么通过一个不同的URL来访问不同的界面呢?
没错,这就是view需要干的第一件事,我们的网站的本地服务器是一直运行的,前端有请求,我们就应该对它进行响应。通过浏览器的地址栏输入URL进行访问我们的网站也是一种请求,我们也要对它进行响应。
这是在views中的代码:第一个引入是固定的,关于网页渲染的;第二个是Http请求的响应对象,第三个是http请求的重定向对象;第四个是通过域名来映射URL的
看着个函数,request是固定的请求对象,必须加上,然后我们看到函数的返回render渲染的网页,网页的相对路径是blog/home.html,为什么路径是这个呢,首先templates是我们自己加上的文件夹,Django会自动去每个app的templates中去寻找home.html,所以不需要templates/blog/home.html,另外我在templates中还创建了一个文件夹blog,与这个app同名,这样做其实有很大的用处,你想,如果多个app都定义了home.html这个界面,然后django又是挨个templates文件中去找,就有可能找错,如果我们加上这个与app同名的文件夹就避免了这个问题
接下来我们来看项目的urls.py是怎么写的:
首先我们得把views.py导入进来把,然后就是url的映射关系了,第一个参数是url的pattern,根据正则表达式来进行匹配,第二个参数是对应的后台函数,最后还有一个魔法参数name,reverse就需要用到这个啦,当然还有别的用途,你可以认为是域名,因为它是与某一个URL一一对应的。
我们试想一个场景,就是用户把你的网址保存到收藏夹了,两年后,你的网站进行了更新,那个URL也就失效了,但是你不想流失这样一个客户吧,说不定他发达了要来打赏你呢?所以我们在网站更新的时候要考虑到以前的网址,然后通过重定向来跳转到现在的页面,另外,如果我们修改了URL,那岂不是每个地方的URL都要改了,这就给维护带来很大的困扰。我们通过name来进行重定向的话。流程是这样的:
用户用失效的URL来访问你的网站,这个urlpatterns接收并且匹配这个url,然后跳转到进行重定向的函数里面进行处理,具体是这样的:
分析下这个重定向的逻辑啊:首先用户输入了失效的URL,然后我们匹配到这个URL时进入到old_calculate_redirect这个函数,然后我们会找到名字为home的path进行重新定位URL,然后通过重定向的URL进入下面这个函数:
然后我们页面返回的就是blog/home.html这个网页了,好了,views就先讲这么多,后面学习的体会和理解也会慢慢分享出来哒。