Django学习开始---路由层
Posted wpcbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习开始---路由层相关的知识,希望对你有一定的参考价值。
本节重点:
1.分组和有名分组
2.分发
3.方向解析(重中之重)
4.名称空间(了解为主)
5.path的转化器书写
1.分组和有名分组:
分组在django的urls中一般由re_path使用,在多个用户输入多个路径中包含的数据时利用分组将数据包裹起来并且传输给服务器:
from django.urls import re_path from . import views urlpatterns = [ re_path(r‘^articles/2003/$‘, views.special_case_2003), re_path(r‘^articles/([0-9]{4})/$‘, views.year_archive), re_path(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), re_path(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail), ] re_path是使用正则表达式获取路径,将一定范围内的路径捕获 在括号中的正则数据会被函数接受,有多少个括号就有多少个数据出入视图函数中。
有名分组则是在分组的基础上对括号中的数据进行命名,使得位置传参变为关键字传参:
from django.urls import re_path from . import views urlpatterns = [ re_path(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]+)/$‘, views.article_detail), ] views中: day article_detail(request,month,day,year):#变为了关键字传参 return HttpResponse(year+‘-‘+month+‘-‘+day)
2.分发:
1,当有多个应用在项目中时,不能将所有应用中的url控制全都放在一个urls中,于是使用分发的方式将各个应用的url处理解耦开来,在urls中使用incolud的方法解耦:
from django.contrib import admin from django.urls import path,re_path from django.urls import include urlpatterns = [ path(‘admin/‘, admin.site.urls), re_path(‘^$‘, views.home,name = ‘home‘), re_path("app01",include(‘app01.urls‘)) re_path("app02",include(‘app02.urls‘)) re_path("app03",include(‘app03.urls‘)) #直接分发给各自的app中, re_path("^",incould("app04.urls")) #利用正则表示,使用户在使用中不会出现需要输入应用名的情况 ]
3.反向解析:
反向解析幽灵中运用方式:
重点需要注意的是别名的运用:
别名是反向解析的一个重点,利用别名去寻找urls中的内容
1.从html中调取urls
在html中利用调取别名是利用{%url 别名%} 的方式来寻找别名,前提条件就是在urls中有别名
from urlDEMO import views from django.urls import re_path,path urlpatterns = [ re_path(‘^index‘, views.index_year,name = ‘index‘), re_path(‘^login‘, views.login, name=‘login‘), #直接name就是增加一个别名 ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="{% url ‘login‘ %}" method="post"> 账户<input type="text" name="user"> 密码<input type="password" name="pwd"> 提交<input type="submit"> </form> </body> </html>
2.从views中调取urls
此方法相对来说较为复杂:
from django.urls import reverse,redirect #需要利用reverse来获取别名 def redirect_to_year(request): # ... year = 2006 # ... return redirect(reverse(别名)) #这里返回的就是调取到的别名,并且执行被调取的别名
此处需要注意逻辑的运用和配合使用的问题
4.名称空间:
名称空间的概念主要作用于反向解析中,在反向解析中对name的调用会在项目的全局顺序中搜索,当在不同项目使用了相同的name时将会出现覆盖现象,于是名称空间的作用就凸显出来,不同的应用对应不同的应用空间,利用reverse识别不同的名称空间俩进行交互,保证所有的函数都能正常运行和执行。
5,path的正则自定义转化器:
额。不会!
以上是关于Django学习开始---路由层的主要内容,如果未能解决你的问题,请参考以下文章