django之路由(url)
前言:
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)相关推荐
- Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法...
Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法 路由的分配中, 可以设定相应的转换器加以约束,比如 ...
- day64 url用法以及django的路由系统
此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...
- Django中的url路由机制------学习mooc中《Python云端系统开发入门》
通过对url的定义转换.传参.命名等,找到相关的view,也就是它的处理函数. 路由就是关联url,及其处理函数关系的过程. 在django框架中,在settings.py文件中的ROOT_URLCO ...
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Django的路由系统
Django的路由系统 url配置就像Django所支撑网站的目录.它的本质是url与要为url调用的试图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时候,要应对执行哪个函 ...
- Django之路由系统
创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码. 命令行创建 python manage.py startapp app01 使用PyCharm创建 在下方弹出的命令 ...
- 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 ...
- python Django框架之URL与视图(3)
文章目录 一.视图的介绍 1.视图是什么? 2.视图模板的配置 3.视图函数的使用 二. URL映射 1.URL路由分发 2.URL反向解析 3.URL正则路径 4.URL命名空间 一.视图的介绍 1 ...
- Django框架--路由分配系统
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
最新文章
- [Swift]LeetCode218. 天际线问题 | The Skyline Problem
- Swift2.0语言教程之闭包
- 如何解决实时历史数据库存储成本问题?
- 2017年你不能错过的Java类库
- 语言用加法实现加饭运算_「编程之美」用C语言实现状态机(超实用)
- 一个简单的你好,世界! 使用 Boost.MPI 消息传递的示例
- Swift傻傻分不清楚系列(一)常量与变量
- [剑指offer][JAVA]面试题第[27]题[二叉树的镜像][递归][栈]
- Mysql闪回工具之binlog2sql的原理及其使用
- 【模板】ISAP最大流
- 老款 iPhone 涨价;微软 AI 研究院落户上海;刘强东不参加人工智能大会 | 极客头条...
- Sublime Text 3 插件安装及Vim 模式设置
- 打游戏的计算机,玩游戏还得台式机!高性能游戏台式电脑推荐
- Java版飞翔的小鸟代码完整
- threejs制作3d模型展示网页
- NGUI:HUD Text
- 手机APP远程控制树莓派
- Android app集成友盟微社区详细步骤
- “智数据,创未来”——2018中国存储与数据峰会在京盛大举行
- 【59元 第二件1元】SIMEITOL/姿美堂玛卡片 蓝玛咖片MACA 60片
热门文章
- “朋友留言”、“点赞提醒”,公众号是想变成第二个朋友圈?[联络易]
- Android Studio使用Git上传代码
- 一个开源的多媒体播放器JiaoZiVideoPlayer,使用超级简单
- python 职场需求_职场必备:如何用Python提升未来竞争力?
- 2014亿玛智慧峰会 让大数据应用触手可及
- 单播、广播和组播优缺点
- 上周热点回顾(2.10-2.16)
- Java中类数组,创建后使用set函数,报NullPointerException空指针异常
- C# SolidWorks二次开发---工程图中心标记(Center Marks)
- 老婆对不起我错了我爱你