前言:

Django大致工作流程

1、客户端发送请求(get/post)经过web服务器、Django中间件、 到达路由分配系统 
2、路由分配系统根据提取 request中携带的的url路径(path)与视图函数映射关系列表中,匹配到1个视图函数,foo(request)执行;

3、视图函数 使用原生SQL或者ORM去数据库拿到数据,在服务端进行渲染(模板+数据渲染)

4、视图函数return一个 response对象 返回客户端

一、Django的路由分配系统

1个URL对应1个视图函数

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from django.contrib import admin
from APP import view
urlpatterns = [
    url(r'^modal/',view.modal),         url(r'^域名',对应的处理函数) 注意不要忘了写 ^ 表示正则匹配以。。开头的URL
    url(r'^modal_add/',view.modal_add),
    url(r'^modal_del/',view.modal_del),
    url(r'^modal_edit/',view.modal_edit),
    ]

二、在客户端通过url中的 path向后端传参数 

 在前端我们不仅可以通过get请求携带参数的方式向server端传数据; https://i.cnblogs.com/%EF%BC%9Fid=1&name=alex

Django也允许通过,path路径的方式向server端传值;

注意事项:按位置,和按关键字路由系统只能用1种,不能混合使用;

1、path正则无名分组匹配《---------》视图函数按位置传参

from django.conf.urls import url,include
from django.contrib import admin
from app1 import views
urlpatterns = [url(r'^index/(\w+)/(\w+)/',views.index2),  #酱紫的话客户端 输入:http://127.0.0.1:8000/index/a/b/也可以访问到该站点url(r'^',views.error)        ]
urlpatterns = [    url(r'^/',index),                   #视图函数 index(request)    url(r'^(\d{4})/\d{2}/$',timeer1),   #视图函数 timeer1(request,实参1)       正则增加了分组,视图函数会增加一个参数;    url(r'^(\d{4})/(\d{2)/$',timeer2)   #视图函数 timeer2(request,实参1,实参2)  视图函数需要2个形参接收;    # url(r'^(?P<year>\d{4})/(?P<month>\d{2})/$',timeer),             ]
 

在路由系统定义了 几个正则分组(),在视图函数对应几个实参接收;

def timeer2(request,a1,a2):
    print(a1,a2)  #打印参数a1,a2 就是 2个正则表达式匹配到的结果  return Httprespose('ok')
#注意如果按位置传参的动态路由系统,必须在视图函数添加对应的参数接收!

2、path正则有名分组匹配《---------》视图函数按关键字传参

按位置传参形参或实参错位会导致数据错乱,所以Django路由分发系统还可以以命名分组的形式匹配URL给视图函数按关键字传参;

from django.conf.urls import url,include
from django.contrib import admin
from app1 import views
urlpatterns = [url(r'^index/(P<n1>\w+)/(P<n2>\w+)/',views.index,name="zhanggen"),
 url(r'^(?P<year>\d{4})/(?P<month>\d{2})/$',timeer),
url(r'^',views.error), ] #注意如果在路由系统正则内部定义了关键字n1,n2,视图函数接收参数也必须是 n1,n2;
urlpatterns = [    # url(r'^/',index),                                   #index(request)    # url(r'^(\d{4})/\d{2}/$',timeer),                    #timeer(request,2014) 正则增加了分组,视图函数会增加一个参数;    # url(r'^(\d{4})/(\d{2)/$',timeer1) ,                 #timeer(request,2014,12) 视图函数需要两个形参接收    url(r'^(?P<year>\d{4})/$(?P<month>\d{2})',timeer2)    #timeer(request,year=2017,month=6) 正则设置了有名分组,视图函数使用关键字传参]

在视图函数定义2个关键字参数, 接收 2个正则表达式匹配到的后缀;

def index(request,n1,n2):print(n1,n2)  #注意必须和 路由系统中的一致return  HttpResponse('OK')

3、URL path传值应用

有了动态路由就 可以不用在  url?nid=8这样传值了!

PS: 
终止符:^edit$  可以精确限制匹配URL的后缀内容
伪静态:url(r'^edit/(\w+).html$', views.edit)  装作成静态网站的url可以 提高 SEO高权重   百度排名靠前

url(r'^student_del/(.*).html/',views.student_del),

<a href="/student_del/{{row.id}}.html/">删除</a></td>

def student_del(request,args1):# user_id=request.GET.get('id')models.User_info.objects.filter(id=args1).delete()return redirect('/students/')

三、路由分发

1个Django 项目里面有多个APP目录大家共有一个 url容易造成混淆,于是路由分发让每个APP的拥有了自己单独的url;

from django.conf.urls import url,include
from django.contrib import admin
from app1 import views
urlpatterns = [url(r'^app1/',include('app1.urls')),url(r'^app2/',include('app1.urls')),  #注意include的是字符串形式的 文件路径;url(r'^',views.error),]

酱紫就可以在每个 Django目录下面写自己的 URL了

四、路由别名(应用站点权限管理)

1、什么是路由别名?

给Django路由分发系统 URL--视图函数对应关系命个名,

然后在模板中{% url "zhanggen" i i1%}反生成 访问该站点URL,

或者在视图函数中reverse()反向生产当前访问URL;

2、作用

保证前后端数据一致性,后端修改了匹配URL,不用在前段更改;

from django.conf.urls import url,include
from django.contrib import admin
from app1 import views
urlpatterns = [url(r'^index/(?P<n1>\w+)/(?P<n2>\w+)/',views.index,name="alex"), 给这个URL起别名 alexurl(r'^',views.error),             ]

在视图函数使用 reverse("别名", args=(1, 2)) 反生 位置参数动态路由的 别名

def index(request,n1,n2):print(reverse("zhanggen", args=(1, 2)))return render(request,'index.html',{'i':1,'i1':2})

在视图函数使用 reverse("别名",kwargs={"关键字参数":1,"关键字参数":2 }反生 关键字参数动态路由的 别名

def index(request,n1,n2):print(reverse("zhanggen",kwargs={"n1":1,"n2":2 }))return render(request,'index.html',{'i':1,'i1':2})

在模板中反生 URL

注意 在视图函数中  return render(request,'index.html',{'i':1,'i1':2})

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<p>{{ i }}</p>
<p>{% url "zhanggen" i i1%}</p>
</body>
</html>

转载于:https://www.cnblogs.com/langhuagungun/p/10265417.html

django之路由(url)相关推荐

  1. Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法...

    Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法   路由的分配中, 可以设定相应的转换器加以约束,比如 ...

  2. day64 url用法以及django的路由系统

    此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...

  3. Django中的url路由机制------学习mooc中《Python云端系统开发入门》

    通过对url的定义转换.传参.命名等,找到相关的view,也就是它的处理函数. 路由就是关联url,及其处理函数关系的过程. 在django框架中,在settings.py文件中的ROOT_URLCO ...

  4. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  5. Django的路由系统

    Django的路由系统 url配置就像Django所支撑网站的目录.它的本质是url与要为url调用的试图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要应对执行哪个函 ...

  6. Django之路由系统

    创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码. 命令行创建 python manage.py startapp app01 使用PyCharm创建 在下方弹出的命令 ...

  7. Django urls 下划线的坑-Using the URLconf defined in xxx, Django tried these URL patterns, in thi

    系统Win11 Python版本 3.10.4 Django版本 2 浏览器:Chrome 在文件名,url配置,view函数名等等,不要随便拼接下划线_,否则在浏览器访问的时候,容易报错. Page ...

  8. python Django框架之URL与视图(3)

    文章目录 一.视图的介绍 1.视图是什么? 2.视图模板的配置 3.视图函数的使用 二. URL映射 1.URL路由分发 2.URL反向解析 3.URL正则路径 4.URL命名空间 一.视图的介绍 1 ...

  9. Django框架--路由分配系统

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

最新文章

  1. [Swift]LeetCode218. 天际线问题 | The Skyline Problem
  2. Swift2.0语言教程之闭包
  3. 如何解决实时历史数据库存储成本问题?
  4. 2017年你不能错过的Java类库
  5. 语言用加法实现加饭运算_「编程之美」用C语言实现状态机(超实用)
  6. 一个简单的你好,世界! 使用 Boost.MPI 消息传递的示例
  7. Swift傻傻分不清楚系列(一)常量与变量
  8. [剑指offer][JAVA]面试题第[27]题[二叉树的镜像][递归][栈]
  9. Mysql闪回工具之binlog2sql的原理及其使用
  10. 【模板】ISAP最大流
  11. 老款 iPhone 涨价;微软 AI 研究院落户上海;刘强东不参加人工智能大会 | 极客头条...
  12. Sublime Text 3 插件安装及Vim 模式设置
  13. 打游戏的计算机,玩游戏还得台式机!高性能游戏台式电脑推荐
  14. Java版飞翔的小鸟代码完整
  15. threejs制作3d模型展示网页
  16. NGUI:HUD Text
  17. 手机APP远程控制树莓派
  18. Android app集成友盟微社区详细步骤
  19. “智数据,创未来”——2018中国存储与数据峰会在京盛大举行
  20. 【59元 第二件1元】SIMEITOL/姿美堂玛卡片 蓝玛咖片MACA 60片

热门文章

  1. “朋友留言”、“点赞提醒”,公众号是想变成第二个朋友圈?[联络易]
  2. Android Studio使用Git上传代码
  3. 一个开源的多媒体播放器JiaoZiVideoPlayer,使用超级简单
  4. python 职场需求_职场必备:如何用Python提升未来竞争力?
  5. 2014亿玛智慧峰会 让大数据应用触手可及
  6. 单播、广播和组播优缺点
  7. 上周热点回顾(2.10-2.16)
  8. Java中类数组,创建后使用set函数,报NullPointerException空指针异常
  9. C# SolidWorks二次开发---工程图中心标记(Center Marks)
  10. 老婆对不起我错了我爱你