zoukankan      html  css  js  c++  java
  • Django--路由urls

    1、什么是urls?

      就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。

    2、简单的路由配置

    from django.conf.urls import url,include
    
    
    from app01 import views
    urlpatterns = [
        url(r'datatimes/(d{4})/(d{2})$', views.year_pipei),
    ]
    • 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
    • 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles
    • 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义

    3、有名分组

      上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。

    在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。

    下面是以上URLconf 使用命名组的重写:

    from django.conf.urls import url,include
    
    
    from app01 import views
    urlpatterns = [
        url(r'datatimes/(?P<year>d{4})/(?P<month>d{2})$', views.year_pipei)
    ]

      这个实现与前面的示例完全相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。例如:

      /articles/2005/03/ 请求将调用views.month_archive(request, year='2005', month='03')函数,而不是views.month_archive(request, '2005', '03')。

    4、分发

      如果一个项目中有多个app,我们如何判断一个路由是执行哪个app?这样我们就用到了路由的分发,首先我们要在每个app中创建一个urls.py文件,然后在全局的urls.py中编写:

    from django.conf.urls import url, include
    from django.contrib import admin
    from app02 import views  #如果两个app中的都有导入的views下面的会覆盖上面的
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^app01/', include('app01.urls')), #指以app01开头的路由,会分发到app01的views.py中
        url(r'^app02/', include('app02.urls')),
    ]

      这样我们就可以用app01开头的路由地址来执行app01中的urls.py,用app02开头的路由地址执行app02中的urls.py。

    5、反向解析

       在模版login.html中有如下代码:

    <form action="/index/"method="post">
            用户名<input type="text" name="user">
            密码<input type="password" name="pwd">
            <input type="submit">

      就是触发事件后,将跳转到路由为index的页面,但是如果路由index被修改后,这里就不能用了,得把这里的路由修改之后才能正常执行,很显然这样很麻烦,这时我们就需要反向解析了,

      在urls.py中给路由加上name属性:

     url(r'index', views.login, name='xxx')

      再给模板中改为如下:

    <form action="{% url 'xxx' %}"method="post">
            用户名<input type="text" name="user">
            密码<input type="password" name="pwd">
            <input type="submit">

      这样不管将来路由index改为任何形式,多会被name传给模板,这就是反向解析。

  • 相关阅读:
    浅谈PHP7新特性
    TP5与TP3.X对比
    深入源码理解Spark RDD的数据分区原理
    OpenGL的一些基础概念
    关于Spark RDD 的认识
    Ubuntu安装Cloudera Manager以及CDH5.15.2
    小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序
    小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令
    机器学习入门之决策树算法
    机器学习的基本概念
  • 原文地址:https://www.cnblogs.com/490144243msq/p/11570026.html
Copyright © 2011-2022 走看看