Day47 Django基础部分、路由配置、空间名称

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.

猜你喜欢

转载自www.cnblogs.com/longerandergou/p/11128027.html
今日推荐