Django(part19)--Django中的应用

学习笔记,仅供参考,有错必纠




Django中的应用


什么是应用(app)


应用在Django项目中是一个独立的业务模块,可以包含自己的路由(urls.py),视图(views.py),……

Django中,主文件夹不处理用户具体请求的。主文件夹的作用是做项目的初始化以及请求的分发(分布式请求处理),具体的请求是由应用来进行处理的


创建应用app


在mywebsite3项目下,创建一个叫book的应用(APP):

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite3>python manage.py startapp book

创建成功后,我们发现项目下多了一个book文件夹,文件夹下有一堆东西:

其中,migrations文件夹是保存数据迁移的中间文件;__init__.py是应用子包的初始化文件;admin.py是应用的后台管理配置文件;apps.py是应用的属性配置文件;models.py是与数据库相关的模型映射类文件;tests.py是应用的单元测试文件;views.py是定义视图处理函数的文件


现在,我想要这个APP起作用,就需要将其注册到mywebsite3文件夹下settings.py模块里的INSTALLED_APPS列表中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book',
]

当我们配置过之后,就可以让该应用(book)和当前的项目(mywebsite3)融为一体


应用的分布式路由


首先,在book文件夹下,我们创建一个urls.py模块,并敲入以下代码:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r"^mylist/$", views.mylist),
]

并在book文件夹下的views.py中敲入以下代码:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def mylist(request):
    return HttpResponse("book中的mylist被调用")

现在,我们回到mywebsite3项目的mywebsite3文件夹下的urls.py,并敲入以下代码:

from django.contrib import admin
from django.urls import path
from django.urls import re_path
from django.conf.urls import include
from . import views
 
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^test_form/$', views.test_form),
    re_path(r'^test_static/$', views.test_static),
    re_path(r'^book/', include("book.urls")),
]

这时,我们就可以对http://127.0.0.1:8000/book/mylist进行访问了:


案例


我们在mywebsite3项目下再创建一个game应用和sports应用,并注册,主路由配置只做分发,不进行请求处理。

创建game应用:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite3>python manage.py startapp game

创建sports应用:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite3>python manage.py startapp sports

在mywebsite3文件夹的settings.py模块里的INSTALLED_APPS列表中注册这两个应用:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book',
    'game',
    'sports',
]

在game应用下增加urls.py模块,并敲入如下代码:

from django.urls import re_path

from . import views

urlpatterns = [
    re_path(r"^index/$", views.index),
]

在game应用的views.py文件下,敲入下面的代码:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse("<h2>Game 首页</h2>")

在sports应用下增加urls.py模块,并敲入如下代码:

from django.urls import re_path

from . import views

urlpatterns = [
    re_path(r"^index/$", views.index),
]

在sports应用的views.py文件下,敲入下面的代码:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse("<h2>sports 首页</h2>")

现在,在主urls.py文件中(mywebsite3文件夹下的urls.py),敲入下面的代码:

from django.contrib import admin
from django.urls import path
from django.urls import re_path
from django.conf.urls import include
from . import views
 
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^test_form/$', views.test_form),
    re_path(r'^test_static/$', views.test_static),
    re_path(r'^book/', include("book.urls")),
    re_path(r'^game/', include("game.urls")),
    re_path(r'^sports/', include("sports.urls")),
]

现在,我们向http://127.0.0.1:8000/game/index/发起请求:

再向http://127.0.0.1:8000/sports/index/发起请求:

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/106841366