Django - 路由控制

一 Django中路由的作用

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

二 简单的路由配置

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
  • 正则表达式:一个正则表达式字符串
  • views视图函数:一个可调用对象,通常是一个视图函数 或者 指定视图函数路径的字符串
  • 参数:可选的要传递给视图函数的默认参数(字典形式)
  • 别名:可选的name参数
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘,views.index),
    url(r‘^articles/([0-9]{4})‘,views.articles),
    url(r‘^articles/([0-9]{4})/([0-9]{2})‘,views.articles),

]

无名分组:使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图

  • 第一个参数,可以写一个正则表达式
  • 从上往下匹配,一旦匹配成功,就不再继续
  • 如果分了几个组,相应的视图函数就应该接受几个
  • 不要添加一个前导的反斜杠,因为每个URL都有
  • 每个正则表达式前面的 r 是可选的但是应该加上。它告诉python这个字符串是“原始的” ,字符串中任何字符都不应该被转义

APPEND_SLASH

在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败

伪静态

方便搜索引擎收录(手动加上.html  看起来是静态的) 具体如下:

url(r‘^edit_book/(\d+).html‘,views.edit_book)
视图层:def(request,nid):
模板:<form action=‘/adit_book/{{book.nid}}.html‘ method=‘post>

三 有名分组

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

1 url(r‘^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.test)
2 def test(request,month,year):
     print(year)
     print(month)
     return HttpResponse(‘ok‘)
     #名字必须一致,否则报错,位置可以颠倒,如果分了两个组,必须用两个参数接
3 有名分组和无名分组不要混用
4 有名分组可以用**kwargs接收,无名分组可以用*args接收
5 分组捕获的参数,都是str类型
6 可以设置默认值

四 路由分发

1 先导入from django.conf.urls import include
2 url(r‘^app01/‘, include(‘app01.urls‘)),有两种方式:。。。。(建议用这种)
        另一种:
        先导入 from app01 import urls
              from app02 import urls as xxx  # urls名字可以改为其他名,但是不建议 这是为了避免重名

                    url(r‘^app01/‘,include(urls))
                    url(r‘^app02/‘.include(xxx))

3 在相应的app里创建urls  py文件,建议,不要改名字
4 urlpatterns 不能变名字 ,后面的写法就一样了 url(r‘^test‘,views.test3 ),
5 重复上面步骤,分发多个

路由由上往下匹配,如果有一个没有匹配上,在最后位置加上一个:万能的(匹配任意)

url(r‘‘,views.index)   胡乱输入会返回首页

五 反向解析

1 路由中,命一个名,url(r‘^index/‘, views.index,name=‘n1‘),
2 在视图函数里:
    from django.shortcuts import reverse
    #这样就能拿到我反向解析出来的url
    url=reverse(‘n1‘)
    再重定向 return redirect(url)
3 在模板(html页面)里用:
    {% url ‘n1‘%}
4 带位置参数反向解析  url(r‘^index/([0-9]{4})/([0-9]{2})‘, views.index,name=‘n1‘),
    视图函数中:url=reverse(‘n1‘,args=(2012,12,))

    模板:{% url ‘n1‘ 2012 12 %}
5 带关键字参数反向解析  url(r‘^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.index,name=‘n1‘),
    视图函数中:url=reverse(‘n1‘,args=(2012,12,)   ---可以
          url=reverse(‘n1‘,kwargs={‘year‘:2014,‘month‘:12})-----也可以

    模板:
        {% url ‘n1‘ 2012 12 %}----可以
        {% url ‘n1‘ month=12 year=2012 %}----可以
    注意:按位置传,顺序是固定的

作用:修改路由中url的时候,其它地方不需要改动


六 名称空间

路由分发时重命名用到名称空间(知道它,但是建议不同app的url里name不能重名,app的名字_name 解析时用这个名字)

1   url(r‘^app01/‘, include(‘app01.urls‘,namespace=‘app01‘)),
        urlpatterns = [
            url(r‘^test‘,views.test3 ,name=‘test‘),

        ]
    url(r‘^app02/‘, include(‘app02.urls‘,namespace=‘app02‘)),
        urlpatterns = [
                url(r‘^test02‘,views.test3 ,name=‘test‘),

            ]
2 在视图函数里:
    url=reverse(‘app01:test‘)
    print(url)

    url=reverse(‘app02:test‘)
    print(url)
3 在模板里:
    <a href="{% url ‘app02:test‘ %}">点我跳到首页</a>

原文地址:https://www.cnblogs.com/kingyanan/p/9601043.html

时间: 2024-08-01 07:06:01

Django - 路由控制的相关文章

Django路由控制

目录 Django--路由控制 Django中路由的作用 简单的路由配置 有名分组 路由分发 反向解析 名称空间 django2.0版的path django版本区别 django2.0 path和re_path 基本示例 path转化器 注册自定义转化器 伪静态 虚拟环境 Django--路由控制 Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的

Django之路由控制配置

路由控制配置 简单的路由配置 Django即支持1.x版本的路由配置也支持2.x的路由配置 1.x版本的路由配置是使用re进行路由配置(re_path) 2.x版本的路由配置使用(path)进行路由配置 from django.contrib import admin from django.urls import path,re_path from app1 import views urlpatterns = [ path('admin/', admin.site.urls), path('

rest_framework之解析器、路由控制、分页

解析器 我们都知道,网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用 但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework有一套解析器, 默认他会帮我们转换3种类型的数据,分别是,JSONParser,FormParser,MultiPartParser 而如果我们需要转换其他数据,需要在视图类里配置parser_classes参数,如下: from rest_framework.parsers impo

wen应用/路由控制/视图函数/单表多表操作

一. 1.wen应用:BS架构的应用程序,B是浏览器,S:server(实现了wsgi协议)+ application https://www.cnblogs.com/liuqingzheng/articles/9523087.html  2.MVC和MTV(Django) M:Model和数据库打交道 V:模板 C:控制器 MTV:(MTV也是MVC架构) M:models和数据库打交道 T:Templates模板层,对到MVC是V这一层 V:视图,Views,路由+V  是MVC的C 二.路

解析器,路由控制,响应器

解析器 urlencode,formdata,json urlencode编码,body体中的数据格式: name = laqz&age=18&xx =yy json编码:{"name":"lqz","age":18} formdata: 需要有数据部分和文件部分的分割 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencode

[Lab4] 路由控制

[Lab4] 路由控制 工具1: Distribute List 过滤路由 试验拓扑 试验目的: R1 过滤掉R3的环回口3.3.3.3 1-1 DL Use For RIP R1/R2/R3跑 RIP 配置省略 R1的回环口1.1.1.1可以ping通R3的回环口3.3.3.3 目标在R1 上过滤掉3.3.3.3路由 我们在R2 上作distribute list R2(config)#access-list 10 deny 3.3.3.0 0.0.0.255 R2(config)#acces

angularJs模块ui-router之路由控制

原文地址:http://bubkoo.com/2014/01/02/angular/ui-router/guide/url-routing/ 在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题. 这里是如何设置一个基本url. $stateProvider .state('contacts', { url: "/contacts", templateUrl: 'contacts.html' }) 当我们访问i

【我的笔记BLOG3】Express基本用法,和路由控制,和模板渲染ejs

1. 路由控制的工作原理 //routes/index.js中的代码//访问主页时,调用ejs模板引擎,渲染index.ejs模板文件,生成静态页面,并显示在浏览器中.router.get('/', function(req, res) { //捕获访问主页的GET请求 res.render('index', { title: 'Express' }); }); 官方给出的写法是在 app.js 中实现了简单的路由分配,然后再去 index.js 中找到对应的路由函数,最终实现路由功能. 我们不

关于前后端分离后的路由控制问题

路由控制在多数框架中均有专门的方法,比如ng和node.但是只会使用是不可以的,虽然我连使用都不会.研究它的实现方式,才是正经道路,因为无论框架中的方式都炫酷或者实用,都是从底层开发出来了,那么底层的方法,就是需要了解研究的方法.依此,在以后的使用或者是自定义的时候才能够如臂使指. 那么前端的路由控制总归来说是有两种方法的. 第一种是H5新增的一类API,history.首先来看一下它的诸多方法. //与浏览器后退按钮作用相同 window.history.back(); //跳转到 windo