一步步玩转测试平台开发(十一):Django基础之创建应用(上)

前文《(十):Django基础之HelloWorld篇》讲解了如何创建一个Django项目,以及如何配置特定的url链接路径来显示Hello World,从而让我们切身体会了url路由层和views视图层如何进行交互的。本文我们将继续Django基础的探索之行,学习如何在Django项目创建一个自定义的应用。并争取通过创建这个应用的示例让大家对url路由层、views视图层之间怎么协同工作能有一个更深入地掌握。

一、创建一个名为“test_mgmt”的应用

打开上文所创建的mysite项目,按照下图演示进行操作,点击Run manage.py Task…,在下面弹出的控制台中输入:

startapp test_mgmt

创建test_mgmt应用.jpg

test_mgmt应用创建完,初始化的文件结构如下:

test_mgmt应用初始化文件结构.jpg

此时应用创建工作还没完成,最关键的一步:在项目的settings.py中注册test_mgmt应用。千万不要忘记这一步,否则该应用无法在Django项目中启用。

注册test_mgmt应用.jpg

二、配置应用的views.py和项目的urls.py

在test_mgmt应用下的views.py 文件,输入代码:

# test_mgmt/views.py
from django.http import HttpResponse

def hello(request):
 return HttpResponse("Hello world ! From test_mgmt App ")

绑定URL与视图函数。打开mysite目录下urls.py文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

# mysite/urls.py
from django.urls import path
from . import views
from test_mgmt import views as test_mgmt_views

urlpatterns = [
       path('hello/', views.hello), # 调用主应用的views.py中的hello()函数
       path('test_mgmt/hello/', test_mgmt_views.hello), # 调用test_mgmt应用的views.py中的hello()函数
]

完成后,启动 Django 服务器,并在浏览器访问 http://127.0.0.1:8000/test_mgmt/hello/

未通过应用urls文件配置访问应用.jpg

此时浏览器切到http://127.0.0.1:8000/hello/

访问主应用.jpg

通过上面的简单的操作,结合前文的讲解,可以看到只要在注册好的应用Views视图层创建函数,然后在主应用的urls.py中引用该应用的views.py。配置url和应用创建的函数后。重新启动Django服务器后,访问新配置的url就可以正常调用相对应新创建的函数了。这就又一次让大家体会了url路由器和views视图层之间是如何协同工作的。很简单吧!

不知道此时大家有没有想过,往往一个实际的web项目,绝大多数都要包含自定义应用,并且要配置的url路由会很多。这个时候当然都可以通过上述的方法一一在主应用的urls.py进行配置。但是这样的话,数量多,要调用的函数又都来自不同的应用,这就给开发新功能和后期的维护带来非常的不便,那怎么解决呢?

三、改造项目主应用的urls.py配置,创建各自应用的urls.py

在test_mgmt应用下新创建一个urls.py文件,并将如下代码复制进去:

# test_mgmt/views.py
from django.urls import path
from . import views

urlpatterns = [
       path('hello/', views.hello),
]

应用创建urls文件.jpg

改造主应用的urls.py文件,将原来的mysite/urls.py里面的代码删除,并将如下代码复制进去:

# mysite/urls.py
from django.urls import path,include
from . import views

urlpatterns = [
        path('hello/', views.hello),
        path('test_mgmt/', include("test_mgmt.urls")), # 当url为host/test_mgmt/xxxxx时,程序会自动调用test_mgmt下的urls.py中配置的路由
]

重新启动Django 服务器,并在浏览器访问 http://127.0.0.1:8000/test_mgmt/hello/

通过应用urls文件配置访问应用.jpg

此时浏览器切到 http://127.0.0.1:8000/hello/

访问主应用.jpg

通过改造主应用的urls.py配置引入include函数,达到了当用户访问特定url后,程序会自动切到相应的应用urls.py中配置的路由去。这样我们的主应用下urls.py配置起来就会变得很优雅,再也不会随着应用越来越多而变得极其臃肿庞大了。

这里介绍一下include()函数,官方提供三种用法:

  • include(module,namespace = None) 本人实际项目中从未用过
  • include(pattern_list) 最常用,上面的例子就是使用这种用法
  • include((pattern_list,app_namespace),namespace = None) 如果自定义应用起了别名,就可以使用这种方法(本人实际项目中从未用过)

参数:

  • module: 表示一种模型文件
  • namespace: 表示实例命名空间,包含的URL条目的实例名称空间
  • pattern_list: 必须是一个可迭代的path() 或者 re_path() 清单
  • app_namesapce: app应用命名空间

怎么感觉这里越解释越让大家感觉到晕呢?直接上图吧,没什么比看示意图更直观的解释方法了。

include函数路由工作示意图.jpg

鉴于考虑每篇文章不想篇幅过长从而影响最终阅读的效果,因此今天就先到这里,下文再继续围绕这个新创建的test_mgmt应用展开后续Django基础的探索之路。

谢谢关注《一步步玩转测试平台开发》系列连载,坚持原创,分享实用干货,敬请期待后面的精彩!