当创建Django项目完成时,会有三个文件settings.py、urls.py、wsgi.py,其中wsgi.py主要用来处理请求的。
当访问url/hello时,Django根据ROOT_URLCONF的设置装载URF_conf,其实就是当请求来时,Django会根据settings.py里ROOT_URLCONF=‘Django_day18.urls’,找到urls.py
然后轮询此文件里所有的urlpatterns,直到匹配到第一个与请求的url / hello /相同的url条件为止,找到的这个urlpatterns就调用相关联的view函数。
当通过浏览器访问hello world时,Django在后台做了些什么动作?
1.进来的请求转入/hello/
2.Django通过在ROOT_URLCONF配置来决定根URLconf
3.Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
4.如果找到匹配,则调用相应的视图函数。
5.视图函数返回一个HTTPResponse.
6.Django转换HTTPResponse为一个合适的HTTP response,以web page 显示出来。
url在django中的使用方式:
1.Django使用setting.py中的ROOT_URLCONF指定使用的urls.py文件(如果中间件有路由功能,urls文件功能会被其替代)。
2.Django使用django.urls.path或者django.urls.re_path将url字符串或者正则表达式与逻辑函数关联起来。
3.Django从上至下查找url匹配,一旦匹配成功,停止查找。
4.一旦匹配url成功后,django传递下列参数:
1.一个HttpRequest实例
2.如果url中的可变参数没有命名,那么就按照位置来与视图函数中的形参一一对应
5.如果匹配不到url,Django会发出异常。
django.urls中的函数:
1.path():
1.url从上至下,在所有path函数的第一个参数的字符串中查找可以匹配的对象
2.path第一个参数字符串开头不需要加‘/’符号
3.url中的变量使用“<>”符号标记,可以使用冒号规定该变量的类型
4.path第二个参数是python函数,url匹配成功后,会将request实例与url中的变量作为形参传递给该函数,并执行该函数
5.path第三个参数为url命名,作用是可以在模版中与views视图函数中反向查询url
from django.urls import include, path urlpatterns = [ path('index/', views.index, name='main-view'), path('bio/<username>/', views.bio, name='bio'), path('articles/<slug:title>/', views.article, name='article-detail'), path('articles/<slug:title>/<int:section>/', views.section, name='article-section'), path('weblog/', include('blog.urls')), ... ]
re.path () :
与path()一样,只是第一个参数为正则表达式。
2.include() :
将其他模块的url文件加载到当前url文件中来,注意正则中无结束符号‘$’,因为后面还有引入模块中的正则表达式。
from django.conf.urls import include, url urlpatterns = [ url(r'^first/', include('mysite.first.urls')), url(r'^second/', include('mysite.second.urls')), ]