美文网首页python学习之路博客专栏《Django By Example》
【Django】路由配置:反向解析、重定向

【Django】路由配置:反向解析、重定向

作者: Alcazar | 来源:发表于2019-08-07 18:42 被阅读8次

简单的路由配置

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
  • 正则表达式:一个正则表达式字符串;
  • views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串;
  • 参数:可选的要传递给视图函数的默认参数(字典形式);
  • 别名:一个可选的name参数;

【注意事项】:

(1):若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
(2):不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
(3):每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义
(4):urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续

from django.contrib import admin from django.urls import path,re_path
from app01 import views
urlpatterns = [    path('admin/', admin.site.urls),

# 路由配置:路径 ----> 视图函数    
re_path(r'^articles/2003/$', views.special_case_2003),    
# ^articles/2003/$ :正则匹配;匹配以articles/2003/开头、以articles/2003/结尾的路径; 唯一匹配
re_path(r'^articles/([0-9]{4})/$', views.year_archive),    
# ([0-9]{4}) 是一个分组匹配(加了括号);匹配到路径后,request会传入 year_archive 函数的 第一个参数;
#分组匹配结果会以位置参数传入到year_archive函数的第二个参数, 
#e.g. year_archive(r equest,1999);so year_archive函数需要有两个参数    
# 从上到下执行,所以如果匹配到了2003,会走第一个路径,下面的不再执行    
# 匹配分组之后,视图函数一定要传入相应的位置参数
re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive)

 # 同理, month_archive需要有三个参数

re_path(r'^articles/(?P<y>[0-9]{4})/(?P<m>[0-9]{2})/(?P<c>[0-9]+)/$', views.article _detail)
 
# (?P<名字>):这是有名分组(就是给每个组取了个名字,用的比较多),有名分组利用的是关键字传参;   
 # 有名分组取的名字一定要和后面函数的形参相同;有名分组传参不依赖于位置顺序 

反向解析

在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。

在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。(前端网页)
  • 在Python 代码中:使用from django.urls import reverse()函数;(写视图函数)

反向解析的过程:用户通过 /login/ 这个接口 到达urls.py,然后通过 path("login/",views.login,name="log") 到达 views.py(用于视图函数)

 # request.method 表示获取 请求方式(GET/POST)

# request.GET 表示获取所有的 GET请求数据;字典的形式        
# <QueryDict: {}>        

 # 反向解析的过程:用户通过 /login/ 这个接口 到达urls.py,然后通过 path("login/",vie ws.login,name="log") 到达 views.py(视图层)     
   
# render(request, "login.html") 方法在渲染 login.html 这个页面的时候,
#会在 action ="{% url 'log' %}" 这一步 找到别名为 "log" 的url,并将 {% url 'log' %} 替换为该url        

# request.PSOT 表示获取所有的 POST请求数据;字典的形式        
# < QueryDict: {'username': ['123'], 'psw': ['123']} >
# 获取请求体(POST)                 
# 每次请求一定要有 返回值     

重定向

在实现逻辑功能时,可能会需要实现重定向的功能。

(1)、通过redirect函数或HttpResponseRedirect函数硬编码的形式

from django.shortcuts import redirect,HttpResponseRedirect

return redirect('/app1/alluser/')  # 硬编码形式
return redirect('/app1/finduser/?userid=62')  # 传递参数
--------------------- 

(2)、通过URLconf路由命名空间的形式。

return redirect('app1_name:alluserpath')

(3)、如果在逻辑函数中不做任何处理,可以直接在url中配置。

相关文章

  • 【Django】路由配置:反向解析、重定向

    简单的路由配置 正则表达式:一个正则表达式字符串; views视图函数:一个可调用对象,通常为一个视图函数或一个指...

  • Linux智能DNS服务搭建之Bind服务(二)

    一、DNS正向解析与反向解析 1.DNS正向解析与反向解析简介 2.DNS正向解析与反向解析配置 1)配置正向解析...

  • 记录有简书的第一个坑,关于反向解析的。

    反向解析中主路由子路由的问题,模板的问题等,

  • (五)2.1重定向路由和子路由和辅助路由

    (一)重定向 简单爆了,直接修改路由配置加参数redirectTo (二)子路由 在路由配置里添加childen属...

  • django框架进阶

    @[toc] Django的URL路由机制 Django的URL路由配置 路由是关联URL及其处理函数关系的过程 ...

  • vue-路由

    需要掌握: 路由map路由视图路由导航 路由参数的配置嵌套路由的使用 命名路由和命名视图重定向 router/in...

  • 重定向/反向解析

    主要用于多个页面之间的跳转。url_for('蓝图定义的名称.方法名') 定义跳转方法,跳转到get_respon...

  • Django 三

    目录 1.Django虚拟环境安装 2.Django路由配置主页与404 3.Django2.x路由分发 4.Dj...

  • 路由反向解析

    在实际的Django项目中,经常需要获取某条URL,为生成的内容配置URL链接。比如,我要在页面上展示一列文章列表...

  • django

    from django.core.urlreolvers import reverse 反向解析url,具体用法可...

网友评论

    本文标题:【Django】路由配置:反向解析、重定向

    本文链接:https://www.haomeiwen.com/subject/punjdctx.html