1.最简单的路由配置
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。
1.1
例1:
第一步:在
urls.py中写入
urlpatterns = [ path('admin/', admin.site.urls), path('articles/', views.articles), ]
在views.py中写入给请求返回的response对象
def articles(request): print("文章页") return HttpResponse("文章页")
小结:上面这种是最基本的,不带url后面不带任何参数的。
1.2 path方法把url写死了
urls.py中写入
path("articles/2009/", views.articles),
访问变成了:
原来的articles/没有用了,路由信息的改变。
1.3re_path
# 为了解决path上面把url写死,用re_path
目的:减少代码冗余,用正则来写
# articles中需要一个接受参数
# 在urls.py文件中写,其中artcles函数需要一个接受参数
re_path("^articles/([0-9]{4})/$", views.articles1), # 无名分组
小结;需要在views函数中写一个形参,才能接受
([0-9]{4})/$匹配出来的参数
# 于是在views中加入一个参数。
def articles(request, y):
print("文章页")
return HttpResponse("文章页")
运行结果如下:
小结:这样就可以实现的多个url的输入,满足正则即可。
# articles中需要2个接受参数
# urls中的代码:
re_path(r"^articles/([0-9]{4})/([0-9]{2})/$", views.articles), # 无名分组按位置传参数,articles后面的参数依次传给views 中的articles函数
# views中的代码:
def articles(request, y,m):
print("文章页", y, m)
return HttpResponse("文章页")
pycharm中控制台打印出的代码:
# 即是获取到了/articles/后面的 /2019/12/等2个参数
## 注意^ 和$ 的使用
1.4 URl和re_path如果要匹配正则规则都需要使用^和$来卡,path内部限制死了的(必须完全匹配)
1.5
1. path 内部封装好了,自动限制首尾的规则 2. url 没有封装,需要自己手动添加正则规则(同re_path方法)
# 在url前后加上参数都是可以访问的 /dsdarticles/ 可以访问 /articles/sdad 可以访问 如果要卡的话 需要自己写上正则来匹配
# path内部前后都卡死了的,
其中re_path 和url是一样的
urls中的代码:
url('articles/', views.articles_url),
views中的代码:(上面的2种情况都是没有参数的 哈哈)
def articles_url(request):
print("文章页")
return HttpResponse("文章页")
1.6无名分组见上面
按位置传参
1.7 有名分组(按关键字传参)
##(1)传入一个参数给views中函数/2019
url.py代码:
re_path("^articles/(?P<year>[0-9]{4})/$", views.articles1), # 有名分组
views中的函数:
处理接受到的url的函数:articles1:
def articles1(request, year):
print("文章页111", year)
return HttpResponse("文章页1111")
##(1)处理客户端url中的参数是2个的,参数传参是关键字传参。
urls.py文件中代码:
re_path(r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$", views.articles),
#得出url传给articles中的参数是2个 都是关键字传参 在函数articles中必须写上month和year才行。
views中代码:
def articles(request, month, year):
print("文章页面", year, month)
return HttpResponse("文章页")
1.8
说白了,就是客户,各种输入你内部就行,接受判断并返回。客户输入的形式/articles/参数/参数 我们需要在内部就行处理,接受参数(有名分组合(关键字传参必须是在url中定义的参数,
在views中对应的函数中的参数)无名分组(按形参顺序就行传参,对应在views中的函数中的参数,可以随便取名,接受就行))
小结:针对1.1-1.8的路由层面的
1.url和re_path差不多,内部没有限制,可以在前面加参数或者后面加参数就行访问,但是只能每次在项目下URls下添加路由,有点麻烦。
2.解决1的麻烦就是在url和re_path中使用正则表达式,可以在访问/articles/.... 前面不变的情况下 增加更多的参数的 上面介绍了加1中参数和2中参数到我们视图处理函数views中,对应接受就行。
# 上面的URl中的路由信息全部写在了主项目中url中:
3.不足的地方:每次都需要在主项目的urls中去写上路由的配置信息,有点繁琐,不利于维护。
解决办法:在每一个app中建立url,在主项目下的url创建分组,从主文件向下app的url中找即可。
2.路由分发
在上图的主项目的url中写上上面的路由分发。
然后对应在app01的url写上真的路由信息:
然后对应在app01的url写上真的路由信息:(同下)
在app02的URls中写上真的路由信息:(只是在主项目的文件下url中就行查找,是哪个下对应的url路由信息,不至于不像之前没有分组的时候那么乱,全部写在一起,只需要在主文件的URl写上最上面的那个信息即可)
# 类似于在广东省下面去找深圳市是一样的道路
views中的代码:
def test(request):
return HttpResponse('app02-test')
3.