码迷,mamicode.com
首页 > 其他好文 > 详细

Django之 路由系统

时间:2018-01-17 16:49:05      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:字符串   path   地址   包括   而不是   实例   类型   ima   配置   

Django的路由系统

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

基本格式

‘‘‘
    urlpatterns = [
         url(正则表达式, views视图函数,参数,别名),
]

参数说明:
    一个正则表达式字符串
    一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    可选的要传递给视图函数的默认参数(字典形式)
    一个可选的name参数
‘‘‘

注意:

Django 2.0版本中的路由系统已经替换成下面写法(官方文当):

from django.urls import path

urlpatterns = [
    path(articles/2003/, views.special_case_2003),
    path(articles/<int:year>/, views.year_archive),
    path(articles/<int:year>/<int:month>/, views.month_archive),
    path(articles/<int:year>/<int:month>/<slug:slug>/, views.article_detail),
]

注意事项

  1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
  2. 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
  3. 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  4. 每个正则表达式前面的‘r‘ 是可选的但是建议加上。

关键点

# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项
APPEND_SLASH=True

分组命名匹配

上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。

在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

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

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

技术分享图片

URLconf匹配的位置

URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

例如,http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/。

在http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找myapp/。

URLconf 不检查请求的方法。换句话讲,所有的请求方法 —— 同一个URL的POST、GET、HEAD等等 —— 都将路由到相同的函数。

捕获的参数永远都是字符串

每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式。例如,下面这行URLconf 中:

url(r^articles/(?P<year>[0-9]{4})/$, views.year_archive),

传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。

命名URL和URL反向解析

url的反向解析

  如上述,url中的正则表达式即为请求的路径,根据路径匹配执行对应的视图函数,如下,当我们请求路径符合正则表达式要求,就会执行对应的login函数:

技术分享图片

其中login函数为:技术分享图片

login.html文件为:技术分享图片

  根据以上我们所写的代码逻辑,当通过get请求/login/路径时,我们执行符合此请求路径对应的login()函数,函数渲染一个login.htl的登录页面,当用户验证完信息点击提交按钮时,再次以post形式请求/login/对应的login()函数。

  但是,在某些情况下,我们需要更改请求路径的正则表达式,即更换一个请求路径,这时候我们就需要对上述的url中的正则表达式和login.html中的提交路径同时进行更改成我们想要的,但是当我们有很多个文件和位置都有请求/login/的时候,我们一个个的手动的更改显然不是很合理。这就需要用到反向解析,也就是url中别名参数的作用,具体实例如下:以上即称为反向解析,无论url中请求路径的如何更改,只要别名不改,程序中对此函数的请求都可以通过别名反向解析的形式找到。技术分享图片

 

待续------------

Django之 路由系统

标签:字符串   path   地址   包括   而不是   实例   类型   ima   配置   

原文地址:https://www.cnblogs.com/jassin-du/p/8303538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!