在本教程中,我们将更仔细地研究Django中路由的工作原理。任何Web应用程序都需要查看传入的Http请求,并决定对该请求做什么。大多数时候,应用程序会收集一些相关的数据,将其打包成一个Http响应,并将其发回给浏览器。在Django中,这个过程由两个文件处理。第一个是 urls.py,第二个是 views.py。urls.py文件是我们设置URL到View函数映射的地方,而views.py文件是我们设置当某个特定路由被访问时触发函数的地方。
创建一个Django项目
为了开始研究Django的URL和视图,我们需要一个Django项目来开始。在我们的系统中已经安装了Python和Django,我们需要做的就是导航到一个我们选择的目录,然后输入命令django-admin startproject djangoblog。
python $django-admin startproject djangoblog
我们可以像这样使用PyCharm来打开我们的新项目。

当你第一次创建一个Django项目时,它会创建一个外部文件夹名称和一个相同名称的内部文件夹。一开始可能看起来有点混乱。了解一个Django项目是由单个应用程序组成的,将有助于理清这个问题。外部文件夹名称是Django项目本身的名称。内部文件夹名称是项目的基础应用程序。这个内部根应用程序包含了大家熟悉的__init__.py、asgi.py、settings.py、urls.py和wsgi.py等文件。
在终端中,我们要cd进入项目文件夹并列出内容。我们应该看到 manage.py 文件和内部的 djangoblog 应用文件夹。

Django URLs和视图
我们需要了解的第一件事是Django中的URL和View是如何一起工作的。

当一个网络请求被发送到Django应用程序时,urls.py文件的工作就是决定如何处理这个请求。这就是所谓的网络应用程序中的路由。所以你可能在你的项目中设置了一些URL,比如 /contact, /stats, /about-us等等。每个路由都会在views.py文件中触发一个不同的函数。每个不同的函数将执行不同的操作,这取决于用户通过网络浏览器选择的路线。
添加一个新的路由
让我们继续,打开根应用程序文件夹中的urls.py文件。我们已经删除了注释,这样我们就可以简单地看到我们的起始代码了。

例如,我们想为 "关于 "页面添加一个路由。下面是高亮显示的代码,可以做到这一点。
djangoblog/urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('about/', views.about)
]
上面的代码是说,当有人访问 /about页面时,urls.py文件将在views.py文件中查找并触发 **about()**函数。我们还没有准备好这些代码,所以我们现在就来创建它。

一旦新的views.py文件在djangoblog的内部文件夹中被创建,我们就可以设置我们的函数了。
djangoblog/views.py
from django.http import HttpResponse
def about(request):
return HttpResponse('<h1>About!</h1>')
如果我们所做的一切都正确的话,我们现在应该可以启动python本地开发服务器并进行测试了。下面我们运行python manage.py runserver命令来启动服务器。
djangoblog $python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 13, 2020 - 12:14:35
Django version 3.0.3, using settings 'djangoblog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
现在我们可以运行浏览器并访问http://127.0.0.1:8000/about/。

不太性感,但是URL到视图的映射已经开始工作了!一个请求被发送到 **/about**的请求,urls.py文件被配置为触发views.py中的about()函数,该函数返回一个简单的HttpResponse对象,字符串为'About!'。
创建第二个URL/视图映射
这个过程可以继续下去,你可以根据需要添加不同的路由和视图功能,以提供你正在寻找的任何结果。我们还没有一个主页,所以我们现在可以添加它。这一次,我们将在views.py文件中定义home()函数,一旦它到位,我们将调整urls.py文件,将两者联系起来。
djangoblog/views.py
因此,我们将再次在views.py中定义一个简单的函数。这一次,这个函数被命名为home()。它的唯一工作是接受传入的Http请求,并返回一个带有一些简单文本的响应。
from django.http import HttpResponse
def home(request):
return HttpResponse('<h1>The Home Page!</h1>')
def about(request):
return HttpResponse('<h1>About!</h1>')
现在我们必须再一次配置urls.py。注意在第三行我们是如何导入视图文件的。这使得我们可以在 urls.py 中引用 views.py 中的函数。第6行是一个简单的表达式,它意味着当你去到没有额外URL参数的域时,就启动views.py中的home()函数。
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
path('admin/', admin.site.urls),
path('about/', views.about)
]
测试这第二条路线时,我们发现确实,这个URL和View函数的组合也很好用!

Django URLs和视图总结
在Django中,URL是你的Web应用程序的前门。你可以在urls.py中配置这种[Django路由]的发生方式。views.py文件是你可以定义你的视图函数的地方。这些函数是根据用户在网络浏览器中访问的URL来决定应用程序的行为。这与任何其他语言的网络应用框架的概念都是类似的。Django的方法既优雅又易于使用。