路由系统 urls
视图 views
模板 TempLates
静态文件和媒体文件 static
中间件 middleware
ORM databases
urls 内容如下:
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('login/', views.login),
path('article',views.article),
path('inOne//',views.inOne),
path('abc//',views.abc)
path('efg//',views.efg),
path('hij/',views.hij),
views 内容如下:
from django.shortcuts import render,HttpResponse
# Create your views here.
def login(request):
print('login')
return HttpResponse('login')
def article(request):
return HttpResponse('article')
def inOne(request,nid):
print(nid)
return HttpResponse('nid'+'inOne')
def abc(request,a):
print(a)
return HttpResponse('abc')
def efg(request,b):
print(b)
return HttpResponse('efg')
def hij(request,c):
print(c)
return HttpResponse('hij')
格式是<类型:参数> 且这个方式是可以传递参数到函数及views里面
int,整数 #匹配整数 格式 < 数据类型 : 数据 >
str,字符串 #匹配字符串
slug,字母+数字+下滑线+- # 匹配 字母+数字+下划线 + -号等
uuid,uuid格式
path,路径,可以包含 /
urls 内容如下:
from django.urls import path,re_path
from app01 import views
# 正则路由
urlpatterns = [
re_path(r'aaa/(\d+)/',views.aaa),
re_path(r'bbb/(\w+)-(\d*)/',views.bbb), # 这样写就是按分组位置传参,views函数中形参随意定义
re_path(r'ccc/(?P\w+)/(?P\d+)/',views.ccc), # s1,s2就是参数名称,views函数中参数必须定义为s1,s2
]
views 内容如下:
from django.shortcuts import render,HttpResponse
# 正则路由
def aaa(request,d):
print(d)
return HttpResponse('正则-aaa')
def bbb(request,e,f): #e,f 按位置来结束url过来的参数,可以任意定义这两个形参
print(e)
print(f)
return HttpResponse('正则-bbb')
def ccc(request,s1,s2): #s1,s2是url固定带过来的必须定义为s1,s2 必须和urls中对应,可以理解成字典
print(s1)
print(s2)
return HttpResponse('正则-ccc')
假如一个项目中有很多个功能,可以分到多个app中,
inlucde + 多apps(一般),将功能拆分不到不同的app中。在每个app中创建每个app自己的路由(urls)。例如有两个app分别是 api web 格式如下:
from django.urls import path,include
urlpatterns = [
path('api/',include('apps.api.urls')), # api 是app目录且后面必须加/ ,include后面是app对应的子路由路径
path('web/',include('apps.web.urls')), # web 是app目录且后面必须加/ ,include后面是app对应的子路由路径
]