学习项目地址: GitHub - xyjw/Django3-Web: Django book
设置路由分发规则
Django默认情况下设置路由URL是在项目同名文件夹urls.py文件,也是有settings.py文件的ROOR_URLCONF决定
一个项目可能包含多个项目应用(APP)如index, commodity, shoper等,而urls.py文件是整个项目URL的总入口,如果项目应用过多就会不易于管理,因此可以在每个项目应用中建立urls.py,而在项目Babys下的urls.py中定义各个应用的路由入口可以方便管理。
Babys.urls配置:
from django.conf import settings
from django.contrib import admin
from django.urls import path, re_path, include
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
# 添加项目应用index, commodity, shopper的urls入口
path('', include(('index.urls', 'index'), namespace='index')),
path('commodity', include(('commodity.urls', 'commodity'), namespace='commodity')),
path('shopper', include(('shopper.urls', 'shopper'), namespace='shopper')),
# 配置媒体资源的路由信息
re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
项目应用(APP)路由地址设置
上面已经在Babys文件夹的urls.py分别为项目应用index, commondity, shopper设置了路由分发下面对各个项目应用设置具体路由信息。
需要在index文件夹下建立urls.py文件,并配置信息
# index.urls
from django.urls import path
from .views import *
#这里报错indexView目前还没定义,可以暂时在那个文件中定义一个空函数
urlpatterns = [
path('', indexView, name='index'),
]
#commodiy.urls
from django.urls import path
from .views import *
urlpatterns = [
path('.html', commodityView, name='commodity'),
path('/detail.<int:id>.html', detailView, name='detail'),
]
# shopper.urls
from django.urls import path
from .views import *
urlpatterns = [
path('.html', shopperView, name='shopper'),
path('/login.html', loginView, name='login'),
path('/logout.html', logoutView, name='logout'),
path('/shopcart.html', shopcartView, name='shopcart'),
]
路由变量与正则表达式
Django路由变量:str, slug(路由解释性字符任意ASCII字符,连接线,下划线)“13-sui-de-hai-zi”
int, uuid(必须使用-:152-5678-1902)
<year> :字符型year
<int: month> 整型month
<slug: day> slug型day
re_path('(?P<year>[0-9]{4})')/(?P<month>[0-9]{2}/(?P<day>[0-9]{2}).html, ....)
- 正则以re_path开始
- ?P 固定格式
- [0-9]{4} 取值0-9,4位