我们在前两期分别讲了Django项目创建:《Django网站搭建系列(一)——项目创建》和数据库设置:《Django网站搭建系列(二)——数据库设置与模型设计》,并且我们创建了博客的第一个模型:博文模型。在前两个章节里,我们已经接触过了django项目中的settings.py和models.py两个配置文件。本章我们将来看看django中另外两个基础,也是核心的配置文件:urls.py和views.py。
一、URL
我们先来看urls.py,顾名思义,该文件跟django项目的路径设置有关,位于项目中的项目同名文件夹中(即跟settings.py在同一文件夹)。我们打开url.py可以看到里面已经写了一小段默认代码:
"""django_website URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.0/topics/http/urls/Examples:Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home')Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import pathurlpatterns = [ path('admin/', admin.site.urls),]
这里面已经写好的是网站的管理页面的url,path函数的意思就是当你输入你的网址+path函数中的第一个变量时(如:www.example.com/admin/),他将会执行后面的函数,在这里就是admin.site.urls,将你输入的地址指向到admin页面。这里的admin.site.urls包含了所有admin的函数。而这也是django最方便的地方之一:我们无需自己编写管理界面,框架自动生成即可。
我们可以先本地打开看一下(127.0.0.1:8000/admin/):
urls.py我们就先介绍到这里。我们上面说到,path函数会执行某些函数,那这些函数是怎么来的呢?答案就是views.py。
二、Views
什么是views?有什么作用?说起来其实很简单,他就像是你网站的主脑,负责通过特定的方式(你编写函数)“花式”调动静态模型中的数据,将它通过不同的方式(比如页面渲染)返回给用户。因此,urls.py, views.py和models.py三者之间的关系大概就是这个样子:
#懒得画图。。。用户请求 → 服务器在urls.py中查看用户请求网址的路径 → 找到路径对应的views.py函数后执行函数 →(可能)提取所需要的数据库数据 → 将数据以特定形式(取决于你写的函数)返回给用户
话不多说,我们就先来实战一下吧。
2.1 博客首页
我们就从博客首页开始练手,相对于其他页面而言,首页基本不需要什么复杂的功能,而且也不需要跟后台数据库打交道(Note:后面我们对django熟悉了之后可以回过头来在首页添加一些复杂的功能,如搜索,JS插件等。这一章节就先只做一个完全静态的页面),我们可以借此先熟悉一下views.py的基本逻辑。
我们打开views.py,里面是这个样子:
from django.shortcuts import render
这里的render函数我们在之后的教程中会一直用到,它的作用是将用户的请求(request)导向到指定的html页面。所以我们跟URL联系起来,逻辑就是,当用户请求某一URL时,系统在URL.py中找到对应的path,path函数执行我们指定的函数,而这个函数就是我们从views.py中引入的,该函数则将会把请求指向特定的页面。我们理解这个逻辑了以后就可以开始编写我们首页的view函数了:
#在这之前请先在templates文件夹中创建“home.html”文件。def Home(request):return render(request, 'home.html')
然后我们就可以任意设计我们的首页(home.html)了:
沈大力的博客
欢迎光临我的博客!
设计好了后,我们打开url.py,将我们首页的路径放进去:
from django.contrib import adminfrom django.urls import pathfrom myblog.views import Home #这里一定要引用我们的views.pyurlpatterns = [ path('admin/', admin.site.urls), path('', Home), #一般首页是不需要任何后缀的,所以这里用''即可。]
这时候我们再打开127.0.0.1:8000就不是django的欢迎界面了,而是我们自己定义的界面:
到这里,我们就实现了urls.py+views.py的联通了。不过正如开始所说,我们这儿并没有涉及到后台的数据库。我们已经创建好了博文模型,又该如何把模型中的数据,也就是我们写的文章“render”到前端给别人看呢?我将在下一章来详细讲解一下views.py, models.py和urls.py三者的互动,发布我们博客的第一篇博文!
原文链接:http://www.leeshen.net/articles/django3/