路由层简单配置

urlpatterns = [
url(r'^admin/$', admin.site.urls),
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

在url中加括号(无名分组)是为了捕获值传给后面的视图函数,注意此时是以位置参数传入的,当参数比较多或者需要调整参数顺序时可以改为有名分组以关键字参数的形式传入

urlpatterns = [
path('admin/', admin.site.urls),
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]+)/$', views.article_detail),
]

路由分发

实际项目中不可能只有一个app,如果所有url都放在一个url文件里,那么如果一个app里的url出问题整个项目就崩溃了,因此需要解耦,将不同app的url分配到对应的app的url文件中,这就是url分发

mysite/urls.py

from django.urls import path, include

urlpatterns = [
# path('admin/', admin.site.urls), # django 2.0以后的写法
# url('^articles/2003/$', views.special_case_2003), # 1.0的写法
# 路由分发:将不同app的路由(url)分发到不同的url里面
# include作用:自动去掉后面的$,完成分发 path('app1/', include('app1.urls')), # 只要是app1下面的url,就分发到app1.urls这个文件里面
path('app2/', include('app2.urls')) # # 只要是app2下面的url,就分发到app2.urls这个文件里面
]

app1/urls.py

from django.conf.urls import url
from app1 import views urlpatterns = [
# 有名分组
url(r'^articles/(?P<y>\d{4})/(?P<m>\d{1,2})$', views.month_archive), # 用正则进行匹配,匹配成功执行后面的函数 ]

app2/urls.py

urlpatterns = [
# 有名分组
url(r'^videos/(\d+)', views.videos), ]

app1/views.py

from django.shortcuts import HttpResponse

def month_archive(request, year, month):
return HttpResponse('year:{0},month:{1}'.format(year, month))

app2/views.py

from django.shortcuts import HttpResponse

def videos(request, video_id):
return HttpResponse('videos:%s' % video_id)

反向解析

  在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

  因此Django提供了一种方法,给URL指定别名,在需要URL 的时候,我们只需要把别名反解出来就行,对于不同层级,Django 提供不同的工具用于URL 反解:

  • 在模板中,使用url模板标签
  • 在python代码中,使用reverse函数

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.login, name="login"), # 指定别名
   path('index/', views.index, name="index"), # 指定别名
]

login.html

<form action="{% url 'login' %}" method="post">
<p>用户名:<input type="text" name="user"></p>
<p>密码:<input type="password" name="pwd"></p>
<input type="submit">
</form>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <h1>个人首页...</h1> </body>
</html>

views.py

from django.shortcuts import render, HttpResponse, redirect
from django.urls import reverse def login(request): if request.method == "POST":
username = request.POST.get("user")
pwd = request.POST.get("pwd")
if username == "alex" and pwd == "":
return redirect(reverse("index")) return render(request, "login.html")
def index(request):
  render(request,'index.html')

Django路由层的更多相关文章

  1. 关于Django路由层简单笔记

    Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  2. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

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

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  4. Django 路由层(urlconf)

    Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...

  5. Django --- 路由层(urls)

    目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...

  6. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  7. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  8. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  9. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

随机推荐

  1. HAOI2018 简要题解

    这套题是 dy, wearry 出的.学长好强啊,可惜都 \(wc\) 退役了.. 话说 wearry 真的是一个计数神仙..就没看到他计不出来的题...每次考他模拟赛总有一两道毒瘤计数TAT 上午的 ...

  2. Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)

    啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下 ...

  3. [SDOI2011]计算器(BSGS)

    洛古题面 对于操作一,用快速幂算即可 代码如下 int quickpow(int a,int b,int k) { int r=1; while(b) { if(b&1) r=(r*a)%k; ...

  4. JavaWeb基础之Servlet简单实现用户登陆

    学习javaweb遇到了一些坑,一些问题总结下来,记个笔记. 学习servlet遇到的一些坑: servlet实现用户登陆遇到的坑解决办法: https://www.cnblogs.com/swxj/ ...

  5. 51Nod--1117 聪明的木匠(排序)

    我们可以反过来想,如何将这几个线段组成一根 并且每次花费是组成的两段的和 #include<bits/stdc++.h> using namespace std; #define maxn ...

  6. 网络分层和Http协议原理

    网络分层: 应用层 传输层 网络层 数据链路层 物理层 物理层: 比特流在节点之间的传输,是计算机连接起来的物理手段. 数据链路层: 控制网络层和物理层之间的通信,功能是在不可靠的物理线路上进行数据可 ...

  7. A1087. All Roads Lead to Rome

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...

  8. 【洛谷P1059 明明的随机数】

    题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  9. Linux下学习摄像头使用

    刚接触Linux硬件驱动有关的项目,配置摄像头经历的一些操作 (这篇文章是刚接触Linux下V4L时作为记录记下的,感觉只有几个命令还有参考作用) 一 确定摄像头种类 确定是否符合UVC标准协议,一般 ...

  10. macs安卓工程创建

    第一个 1.创建工程后先修改xml文件. 然后主程序中编写代码. center :如果图片比imageview大则显示中片中心部分 image大小  把view填满 匹配父控件 ,父控件多大它就多大. ...