目录
1.应用app
在Django框架中,当项目变得巨大的时候,各种各样的功能全都放在主项目文件,就会显得太过杂乱,缺乏逻辑性和层次性。
Django中App的作用就在于此,我们可以将不同类型的功能分成多个不同的App应用来开发,每个app对应其功能。Django App对程序结构进行了解耦,在团队开发中,架构师对程序团队进行开发分配,例如一组开发app1,二组开发app2,等。
注意:这里指的应用app实际的含义为子项目,在Django开发中我们将创建子项目这一行为叫做应用app
2.创建应用app
使用manage.py的子命令startapp创建应用文件夹,在setting.py中找到INSTALLED_APPS参数并在其中添加此应用
实例
# 创建主项目
$ django-admin startpoject apptest
$ cd apptest
# 创建应用app1,music
$ python manage.py startapp music
# 创建应用app2,vedio
$ python manage.py startapp vedio
使用pycharm打开,项目结构如下
修改主项目(startpeoject 后跟的name)setting.py文件,添加应用app,找到INSTALLED_APPS这个参数
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'music',
'vedio'
]
3.配置多应用路由规则
在music目录下创建urls.py文件,并写入:
from . import views
from django.conf.urls import url
urlpatterns = [
url(r'^index',views.index)
]
修改muisc目录下的views.py文件
from django.http import HttpResponse
def index(requests):
return HttpResponse("--music 首页--")
vedio目录做相同操作
修改主项目urls.py文件:
from django.urls import path,re_path
from django.conf.urls import include
from . import views
urlpatterns = [
path(r'^index',views.index),
path(r'^music/',include('music.urls'))
path(r'^vedio/',include('vedio.urls'))
#django version > 3.0 使用re_path
#re_path(r'^index',views.index),
#re_path(r'^music/',include('music.urls')),
#re_path(r'^vedio/',include('vedio.urls'))
]
配置pycharm,配置run程序:
打开浏览器输入:http://127.0.0.1:8000/music/index和http://127.0.0.1:8000/vedio/index
总结:首先在主项目的urls.py文件中添加app的匹配规则,再到具体的app中配置urls.py
4.模板匹配规则
按照上面的例子,若在setting.py文件中配置了外层的templates路径以及APP_DIRS 设置为true,如:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,"templates")], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
如图,此时访问http://127.0.0.1:8000/index或http://127.0.0.1:8000/music/index将会的到什么结果
注意:配置tempaltes需要修改views.py文件,调用render函数检索文件目录
from django.http import HttpResponse from django.shortcuts import render def index(requests): return render(requests,"index.html")
此时可以看到,访问http://127.0.0.1:8000/index或http://127.0.0.1:8000/music/index将会的到相同的结果
django查找模板的规则
1.优先查找外层的templates文件夹内的同名html文件
2.若在外层templates文件夹内没有找到同名html,再到app内部的templates内查找
3.若app内部也有同名html文件,则按照setting.py文件中声明的顺序查找
如改配置会先找music下的同名html,再找vedio下的同名html
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'music', 'vedio' ]
提示:模板的查找顺序不依赖路由配置,它是独立寻找的,这也是为什么访问http://127.0.0.1:8000/index或http://127.0.0.1:8000/music/index将会的到相同的结果的原因