zoukankan      html  css  js  c++  java
  • URL some

    **

    路由系统:
    URL配置(URLconf)就像Django所支撑网站的目录. 本质是URL与该URL要调用的函数的映射表
    基本格式 :
    from django.conf.urls import url
    urlpatterns = [
        url(正则表达式,views视图,参数,别名)
    ]
    参数 -- 传给函数视图的默认参数 (字典形式)
    别名 -- 一个可选的name参数
    
    若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)
    不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles
    每个正则表达式前面的'r' 是可选的但是建议加上
    是否开启URL访问地址后面不为/跳转至带有/的路径的配置项    APPEND_SLASH=True
    
    (d+) 正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图
    (?P < name > pattern),其中name是组的名称,pattern是要匹配的模式    可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图
    
    在实际应用中,使用分组命名匹配的方式可以让你的URLconf 更加明晰且不容易产生参数顺序问题的错误,但是有些开发人员则认为分组命名组语法太丑陋、繁琐
    
    URLconf 匹配的位置  ***
    例如
    http://www.example.com/myapp/ 请求中,URLconf 将查找 /myapp/
    http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找 /myapp/
    URLconf 不检查请求的方式  换言之,所有的请求方法 -- 同一个URL的POST,GET,HEAD,等等,都将路由到相同的函数
    
    捕获的参数永远都是字符串  ***  re匹配   match // find all // search
    每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
    传递到视图函数views.year_archive() 中的year参数永远是一个字符串类型
    
    视图函数指定默认值
    # urls.py中
    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^blog/$', views.page),
        url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
    ]
    # views.py中,可以为num指定默认值
    def page(request, num="1"):
        pass
    上面例子上,两个url 模式指向相同的 函数,但是第一个模式并没有从url中捕获任何东西
    如果第一个匹配上了,page()函数将使用其默认参数num='1',如果第二个匹配上了,page()
    将使用正则表达式捕获到的num值
    
    

    include 其他的URLconfs  --从其他地方导入urls

    from django.conf.urls import include, url
    
    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^blog/', include('blog.urls')),  # 可以包含其他的URLconfs文件
    ]

    传递额外的参数给视图函数

    URLconfs 具有一个钩子,让你传递一个python 字典作为额外的参数传递给视图函数

    django.conf.urls.url() 可以接受一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
    ]
    
    在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year='2005', foo='bar')。
    当传递额外参数的字典中的参数和URL中捕获值的命名关键字参数同名时,函数调用时将使用的是字典中的参数,而不是URL中捕获的参数

    命名URL和URL反向解析

    在使用Django 项目时,一个常见的需求是获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等).
    
    -- 反向解析 -- 
    反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查
    
    在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
    1 在模板中: 使用url模板标签
    2 在python代码中:使用django.core.urlresolvers.reverse() 函数
    3 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法

    使用 -- 给我们的URL匹配规则起个名字,一个URL模式起一个名字,只需要通过名字调用当前的URL
    下面举例:
    url(r'^home', views.home, name='home'),  # 给我的url匹配模式起名为 home
    url(r'^index/(d*)', views.index, name='index'),  # 给我的url匹配模式起名为index
    
    后面再模板中引用:  --HTML--
    {% url 'home' %}
    
    在views函数中可以这样引用   --py--
    from django.urls import reverse 
    reverse("index", args=("2018", ))

    命名 空间模式

    即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL

    举例
    project中的urls.py
    from django.conf.urls import url, include
     
    urlpatterns = [
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]
    
    app01中的urls.py
    from django.conf.urls import url
    from app01 import views
     
    app_name = 'app01'
    urlpatterns = [
        url(r'^(?P<pk>d+)/$', views.detail, name='detail')
    ]
    
    app02中的urls.py
    from django.conf.urls import url
    from app02 import views
     
    app_name = 'app02'
    urlpatterns = [
        url(r'^(?P<pk>d+)/$', views.detail, name='detail')
    ]
    
    现在,我的两个app中 url名称重复了,我反转URL的时候就可以通过命名空间的名称得到我当前的URL
    下面是语法:
    '命名空间名称:URL名称'
    模板中使用:       -html-
    {%url 'app01:detail' pk=12 pp=99 %}
    views 中函数使用  -py-  
    v = reverse('app01:detail',kwargs={'pk':11})

    https://www.cnblogs.com/maple-shaw/articles/9282718.html -- 路由--

  • 相关阅读:
    IO流上机作业
    数据结构堆排序
    数据结构实训报告
    字符串的基本操作
    java窗口的简单切换
    判断一个串B位于串A的位置
    c语言实现数组转置,加减,乘法运算
    java异常处理
    弹奏乐器
    课程总结
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10444972.html
Copyright © 2011-2022 走看看