zoukankan      html  css  js  c++  java
  • Django笔记&教程 2-1 URL与View关系

    Django 自学笔记兼学习教程第2章第1节——URL与View关系
    点击查看教程总目录

    参考:how-django-processes-a-request

    1- Django处理请求(request)过程

    简单概括如下:

    1. 根据ROOT_URLCONF(位于setting.py)选择对应的url解析模块(默认是urls.py
    2. 加载上一步找到的url解析模块(默认是urls.py)查找变量urlpatterns
    3. 按顺序遍历urlpatterns里面的urlpattern,返回第一个匹配requested URL的urlpattern
    4. 上一步匹配成功,Django就会导入并调用urlpattern里面对应的视图view(一般在views.py里面)
    5. 第三步没有找到匹配的,或者寻找的过程中有异常抛出,Django会调用适当的错误处理视图(见error-handling

    上面步骤的一些细节补充

    1. urlpattern: 变量urlpatterns里面的元素,称作urlpattern,urlpattern可以通过django.urls.path()函数或django.urls.re_path()函数获得,例如
    urlpatterns = [
        path('articles/2003/', views.special_case_2003),
        re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
        re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
        ......
    ]
    
    1. 有一些老的教程资源里面urlpattern写成url('articles/2003/', views.special_case_2003)[在开头会from django.conf.urls import url],
      这种写法不推荐使用,django.conf.urls.url()django.urls.re_path()的别名。在将来的版本中,它可能会被弃用.(出自https://docs.djangoproject.com/en/2.2/ref/urls/#url)
    2. 视图view,可以看做一个简单的Python函数,这个方法会根据一个 HttpRequest实例(对应输入参数request),返回一个HttpResponse实例。
      request为视图view一定要有的参数,根据需要,urlpattern也有可能给视图view添加其他输入参数。

    PS: 这些细节我们也会在本章后面的一些小节里面详细的讲下

    2- 代码示例

    urls.py(项目文件夹下)

    from django.urls import path
    from my_app import views
    
    urlpatterns = [
        path('hello/', views.hello),
    ]
    

    views.py(应用my_app文件夹下)

    from django.http.response import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello")
    

    此时运行项目后,在浏览器打开http://127.0.0.1:8000/hello/页面如下
    在这里插入图片描述

    3- 示例详细过程分析

    浏览器访问http://127.0.0.1:8000/hello/的具体步骤如下
    首先浏览器部分做的是:

    1. 127.0.0.1:8000/:浏览器通过127.0.0.1这个域名找到对应的服务器(127.0.0.1表示的是本地服务器),
      给这个服务器上8000这个端口号发送访问请求
      hello/: 路径,用于给Django程序匹配urlpattern

    Django后台收到这个访问请求后:

    1. Django程序首先去找根据ROOT_URLCONF(位于setting.py)选择对应的url解析模块(默认是urls.py
    2. 加载上一步找到的url解析模块(默认是urls.py)查找变量urlpatterns
    3. 按顺序遍历urlpatterns里面的urlpattern,第一个urlpatternpath('hello/', views.hello),匹配requested URL里的hello/
    4. 匹配成功,Django就会导入并调用urlpattern里面对应的视图view(views.py里的hello方法),返回给浏览器一个HttpResponse("Hello")

    参考:https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL

  • 相关阅读:
    文件上传漏洞之js验证
    文件上传漏洞靶机upload-labs(1到10)
    URI/URL/URN都是什么
    解压jdk报错gzip: stdin: not in gzip format
    burpsuite常见问题
    C/C++字符串反转的N种方法
    转 二叉树之Java实现二叉树基本操作
    MySQL 面试基础
    转 MySQL中的行级锁,表级锁,页级锁
    MySQL问题排查工具介绍
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285579.html
Copyright © 2011-2022 走看看