工具:Pycharm,python 3,Django 2,cmd命令行
步骤:
1.默认已经建好了一个Django最小框架myDjango。
2.在myDjango目录下,用命令行创建一个app,输入 python manage.py startapp firstApp
。app和project的关系大概是:后者实现前者的一个子功能。
views.py中包含对某个HTTP请求(url)的响应,通俗的说就是请求一个url后,views.py决定返回的内容。至于负责哪个url,需要通过修改urls.py来确定,后面会提到。
3.对firstApp下的view.py文件进行修改,如让它返回一个网页(这个网页是复制了apache的一个子页面的源码),就需要在render函数中写明这个页面的路径。在这里我是在firstApp下新创建了一个myTemplate.html。
from django.shortcuts import render
from django.http import HttpResponse
def hello(request): #输入的参数是一个url请求对象
return render(request,"myTemplate.html") #对于请求,返回一个由render函数返回的response对象
4.接下来需要配置路由,就是当浏览器发出一个url请求时,路由找到关于此url对应的response内容在这个project中的什么位置。首先配置app的本地路由,在firstApp下创建urls.py,输入如下代码。
from django.urls import path
from . import views #导入同属于一个包中的views
urlpatterns = [
path('',views.hello) #将本地路由和views中要展示的内容连接
]
接着配置全局路由,在myDjango下的urls.py增加一个path。
这使得当浏览器请求index/目录时,Django的全局路由会找到firstApp.urls(即应用的本地路由,见上),firstApp.urls又会找到views文件,执行它的hello函数(这个函数的结果就是要返回一个页面)。
from django.contrib import admin
from django.urls import path
from firstApp import views #导入某一个app
from django.urls import include,path
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', include("firstApp.urls")), #将应用与url相关联
]
5.接下来需要修改模板,大致就是告诉你html页面(也就是模板)在这个project中的哪个位置。打开myDjango下的settings.py,修改TEMPLATES下的DIRS部分。即写上模板的路径(这里就是上文放在firstApp下的html文件的位置)。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,"firstApp")],
'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',
],
},
},
]
6.最后用cmd运行project:python manage.py runserver
。同样地得到url,同时记得本次修改的是index/这个位置,所以在浏览器中输入http://127.0.0.1:8000/index/,返回的就是myTemplate.html的页面内容了。
总结:
1.Django的Web框架遵循着MTV模式。这里涉及了Template模板和View视图。还没有对Model进行修改。MTV大致可以理解为,T是一个壳,即html页面的架构;M是填充物,与数据库相连。T中填入M,然后就是最后返回给用户看到的V,这样做的好处大概就是外观架构的修改(T)和具体的数据变更(M)可以分开处理。
2.这里涉及了许多路由的概念。其中urls文件,包括了本地路由和全局路由是为了将请求的url与指定的视图View建立联系。而修改settings中的TEMPLATES是为了让project运行的时候找到模板所在的位置。 此外,在建立url与view的联系时分为了本地和全局两个路由,我的理解是一个project可能有多个应用,有多个模板,一个应用下也可能有多个模板,所以project层的全局路由和app层的本地路由分开管理比较清楚,当然对于上面这个只有一个app一个模板的情况来说设置两个路由有些多此一举了。