Django的请求流程(url)

当创建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')),
]
View Code
原文地址:https://www.cnblogs.com/jacky912/p/10429262.html