2、Django定制页面(子应用)及路由配置
在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。
二、创建步骤
1、创建子应用
命令行模式执行:python manage.py startapp projects
projects为自己想要创建的子应用名称,子应用名小写复数形式,不要用中文
子应用目录和文件说明
projects/migrations:存放数据库迁移脚本和迁移历史记录等信息
projects/admin.py:admin后台站点的相关配置(需要后台站点时才会用到)
projects/apps.py:为app label的相关配置
projects/models.py:存放数据库模型相关信息
projects/tests.py:对当前的子应用进行自测的单元测试
projects/views.py:子应用视图,定义业务逻辑
2、注册子应用
在全局配置文件Dev04/settings.py中的INSTALLED_APPS,对子应用进行注册
子应用名.apps.子应用名首字母大写Config
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'projects.apps.ProjectsConfig'
]
3、创建视图函数或视图类
3.1、在projects/views.py下创建视图函数
from django.http import HttpResponse
def index(request):
if request.method == "GET":
return HttpResponse("<h2>GET,这个是index页面</h2>")
elif request.method == "POST":
return HttpResponse("<h2>POST,这个是index页面</h2>")
def page_1(request):
return HttpResponse("<h2>这个是page_1页面</h2>")
def page_2(request):
return HttpResponse("<h2>这个是page_2页面</h2>")
3.2、在projects/views.py下创建视图类
from django.views import View
class PageClass(View):
def get(self, request):
return HttpResponse("<h2>GET,这个是index页面</h2>")
def post(self, request):
return HttpResponse("<h2>POST,这个是index页面</h2>")
def put(self, request):
return HttpResponse("<h2>PUT,这个是index页面</h2>")
def delete(self, request):
return HttpResponse("<h2>DELETE,这个是index页面</h2>")
4、配置路由
前端获取一个页面,其实就相当于调用后端的一个函数
路由起到承接前端和后端的交互
路由表:url与后端视图函数是一一对应的关系
使用规则:在urls.py模块下的urlpatterns字段列表中定义
e.g 路由匹配会先从主路由开始,匹配到则返回,如果url第一部分匹配成功,那么会将url剩下的部分拿到子路由中进行匹配
4.1 配置子路由
4.1.1、路由指向视图函数
在子应用projects新建urls.py 文件
将视图文件views下定义的视图函数导入至urls.py中
前端访问xxx/index/,则调用index视图函数,
前端访问xxx/page_1/,则调用index_1视图函数,以此类推
from django.urls import path
from .views import index,page_1,page_2,PageClass
urlpatterns = [
path('index/', index),
path('page1/', page_1),
path('page2/', page_2)
]
4.1.2、路由指向视图类写法
将视图文件views下定义的视图类导入至urls.py中
urlpatterns添加如下路由
前端访问xxx/index2/,则调用PageClass视图函数,
path('index2/',PageClass.as_view())
4.2 配置全局路由urls
全局路由可直接指向全局views定义的视图函数和视图类,和子路由配置规则一样。
全局路由若想指向子应用views定义的数函数和视图类,配置方法如下:
1、from django.urls import include 导入 include模块
2、配置全局路由指向子应用的urls,其中page是定义的中转路径。访问子路由的url方式为域名/page/子路由
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('page/', include('projects.urls')),
]
5、效果演示


