Django 路由层(urlconf)

Django 的路由层(URLconf)

URL配置(conf)就像是Django所支撑的网站的目录;

本质就是:URL与调用该URL执行的视图函数的映射表;

通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码.

一  路由配置的简单使用

path :不能使用正则 ,path(‘路径‘,views.方法)

re_path :可以使用正则 ,re_path(r‘正则表达式路径‘,views.方法)
from django.urls import path,re_path 

from app01 import views #必须导入views

urlpatterns = [
    re_path(r‘^articles/2003/$‘, views.special_case_2003),

]

二  路由配置使用注意事项

  •   若要从URL中获取一个值,只需要在对应的URL处放置一对圆括号
re_path(r‘^articles/([0-9]{4})/$‘, views.year_archive) #传送给views时会携带小括号的数值,故需要相应的形参接受
  • 不需要添加一个前导的反斜杠,因为每个URL 都有。
re_path(r‘/articles/$‘, views.year_archive)  #错误写法
  • 每个正则表达式前面的‘r‘ 是可选的但是建议加上.

三 路由配置与views传值过程解析

‘‘‘
url配置:
re_path(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive),

对应url请求时候的传值过程

/articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数views.month_archive(request, ‘2005‘, ‘03‘)。

‘‘‘

四 有名分组

  1 基本格式

path(‘index/(? P<year> \d{4})‘,views.year)

对应views中

def year(request,year):

     return HttpResponse(year)

  2 传值方式---关键字传参

/articles/2003/03/03/ 请求将调用函数views.article_detail(request, year=‘2003‘, month=‘03‘, day=‘03‘)。

五 分发(include)

  1、分发意义

  ULR解耦合。把每一个应用的视图函数放入自己的文件中,全局的urls只需要分配该路径属于某一个应用的视图函数。这样解决如果有一个程序出了问题不会影响到其他的应用的执行。

urlpatterns = [
   re_path(r‘^admin/‘, admin.site.urls),
   re_path(r‘^app01/‘, include(‘app01.urls‘)),
]

之后app01中的urls,再对匹配成功的url进行分发

六 反向解析

  1 使用场景

在模板中:使用url 模板标签。
     {%  url ‘别名‘ %}
在Python 代码中:使用from django.urls import reverse()函数  rev_url=reverse(‘别名‘)  

  2 html文件中的反向解析

项目.urls.py 设置别名 name=‘Index‘

from django.contrib import admin
from django.urls import path,re_path

from app01 import views
urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    path(‘index/‘,views.index,name=‘Index‘),
    path(‘login/‘, views.login)

]

app01.views.py中 导入 inverse

from django.shortcuts import render,HttpResponse,redirect

from django.urls import reverse #导入方向解析函数

# Create your views here.

def index(request):

    return render(request,‘index.html‘)

def login(request):
    print(request.method)
    if request.method==‘GET‘:
        return render(request,‘login.html‘)
    else:
        re_path=reverse(‘Index‘) #反向解析
        return redirect(request,re_path)

  3 html 文件中的反向解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{%  url ‘Log‘ %}" method="post">
    {% csrf_token %}

    用户名 <input type="text" name="user"> 密码 <input type="text" name="pwd">
    <input type="submit">
</form>
</body>
</html>

  4 反向解析解析过程分析

  根据别名,在urlpatterns中找到对应的路径并返回

五 名称空间(解决反向解析出现找不到正确url的问题)

  命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

  由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回.

  我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

project的urls.py

urlpatterns = [
    re_path(r‘^admin/‘, admin.site.urls),
    re_path(r‘^app01/‘, include("app01.urls",namespace="app01")),
    re_path(r‘^app02/‘, include("app02.urls",namespace="app02")),
]

app01.urls

urlpatterns = [
    re_path(r‘^index/‘, index,name="index"),
]

app02.urls

urlpatterns = [
    re_path(r‘^index/‘, index,name="index"),
]

app01.views 

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app01:index"))

app02.views

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app02:index"))

原文地址:https://www.cnblogs.com/angle6-liu/p/10216728.html

时间: 2024-11-06 03:53:45

Django 路由层(urlconf)的相关文章

Django路由层与视图层、pycharm虚拟环境

一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实际工作中一个项目多人协作完成提供了便利:即每个人单独建一个Django项目写一个APP,最后新建一个Django项目将所有APP汇总,然后settings中注册各个APP,再修改一下其他配置即可. 路由层大致内容如下: from django.conf.urls import url from dj

django路由层(一)

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数. URLconf配置 基本格式: 示例: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test', views.test), url(r'^testadd

五十六、Django路由层与视图层

一.路由层 1.路由匹配规律 # 网站首页路由:url(r'^$',views.home) # 网站不存在页面:url(r'',views.error) urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.home), url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) ] # 注意:第一个参数是正则表达

Django路由层

Urls的正则匹配 路由层作用是url与视图函数的映射 特点1.匹配成功后 不再往下匹配 2.如果结尾没有/ 匹配失败后 加上/再走一次匹配列表,在settings.py中设置了 APPEND_SLASH=False 可以关闭 如何拿到完整url? 在视图函数中,request.path 可以拿到前缀路径 通过request.get_full_path() 可以拿到完整的路径 http://127.0.0.1:8000/test/hahah/?id=asda/ request.path>>&g

5 Django-1的路由层(URLconf)

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 简单的路由配置 from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/

Django 路由层,视图层,模板层

MVC与MTV模型 一.MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示: 二.MTV Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是: M 代表模型(Mode

django路由层(二) 反向解析和名称空间

url命名和反向解析 根据名字动态获取到对应的路径 可以给每一个路由与视图函数对应关系起一个名字 这个名字能够唯一标识出对应的路径 注意这个名字不能重复是唯一的 应用场景 通过别名来传递路径给到前端或者后端,好处是更加灵活,因为是通过别名进行传递,所以只要修改源路径,其他的层都不需要更改,否则如果直接通过源路径传递,则耦合度较高,不够灵活,维护成本太高 无分组反向解析 第一步: 命名 url(r'^pre/', views.press_list, name='press_list') 第二步:

5 Django-2的路由层(URLconf)

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 简单的路由配置 from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_p

Django 基础 之路由层

1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.site.urls), path('articles/2003/', views.special_case_2003), re_path(r'^articles/([0-9]{4})/$', views.year_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/$'