django 实战篇之路由层
路由层
如何给网页添加首页及尾页
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'test',views.test),
url(r'testadd',views.testadd),
]
路由一旦匹配就不再走下面的路由匹配关系了
路由增加首页的方式
url(r'^$',views.home)
路由增加尾页的方式(当所有的路径都匹配不上时,给我返回404提示信息)
url(r'',views.error)
无名分组:
url(r'^test/([0-9]{4})/',views.test)
会将加了括号的正则表达式匹配的内容当做位置参数传递给后面的视图函数
有名分组:
url(r'^test/(?P<year>\d+)/',views.test)
会将加了括号的正则表达式匹配的内容当做关键字参数传递给后面的视图函数
关键字就是你尖括号里面的名字(year)
注意:
有名分组和无名不能混合使用!!!
只要不混着用,有名分组和无名分组支持多个相同类型的传参
反向解析(需求是路由函数名修改后前端的页面中用到这个函数的名字都需要修改)
前端反向解析
{% url 'add' %} # {% url '放urls.py中路由与视图函数的name的值' %}
后端反向解析
from django.shortcuts import reverse
url(r'^testadd123/$',views.testadd,name='add')
res = reverse('add')
无名分组的反向解析
前端反向解析
{% url 'add' 1 %} # {% url '放urls.py中路由与视图函数的name的值' %}
后端反向解析
from django.shortcuts import reverse
url(r'^testadd123/(\d+)/$',views.testadd,name='add')
res = reverse('add',args=(1,))
有名分组的反向解析
前端反向解析
{% url 'add' 1 %} # {% url '放urls.py中路由与视图函数的name的值' %} 推荐你用这种
<a href="{% url 'add' year=1 %}">999</a>
后端反向解析
res = reverse('add',args=(1,)) # 推荐你用这种
res = reverse('add',kwargs={'year':1})
也可以这样拿到前端的id值
url(r'^edit/(\d+)/',views.edit,name='edit_user')
{%for user_obj in queryset %}
edit/?id={{user_obj.pk}}
edit/?id={{user_obj.pk}}
edit/?id={{user_obj.pk}}
{%for user_obj in queryset %}
edit/{{user_obj.pk}}/ >>> url(r'^edit/(\d+)/') def edit(request,edit_id) url = reverse('edit_user',args=(edit_id,))
edit/{{user_obj.pk}}/
edit/{{user_obj.pk}}/
edit/{{user_obj.pk}}/
"""
路由分发
总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系
from django.conf.urls import include
每一个app下都可以新建自己的urls.py static文件夹 templates文件夹
项目总路由:
url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls))
应用子路由:
app01.urls.py
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/',views.index)
]
app02.urls.py
from django.conf.urls import url
from app02 import views
名称空间(可以通过添加名乘空间找到是属于哪个app中的值)
url(r'^app01/',include(app01_urls,namespace='app01')),
# url(r'^app02/',include(app02_urls,namespace='app02'))
# print(reverse('app01:aaa'))
# print(reverse('app02:aaa'))
伪静态的概念(就是在路由后面加上.html文件)
例如:url(r'^index.html/',views.index)
假装自己的路径是一个静态(数据写死的)文件的路径,其实你
是经过了视图函数处理,动态渲染页面
提高百度收藏你这个网页力度,当别人搜索你这个页面相关的内容
百度会优先展示你的页面(这样虽然能提高你网页被访问概率,但是还是干不过RMB玩家)
虚拟环境(演示一下虚拟环境,下载django2.0测试自定义转换器)
由来:
每个项目用到的模块不一样
目的:
为了让每一个项目都有仅仅属于自己的项目解释器
使用:
new project的时候选择虚拟环境创建项目
如果勾选了下面的make to all project你创建的虚拟环境就能够被其他新建的项目使用
django2.0与django1.0的区别(了解)
1.0里面的url对应django2.0里面re_path
django2.0里面的path第一个是精准匹配(你怎么写的,我就怎么匹配)
django1.0版本中匹配到的参数都是字符串类型
django2.0转换器(了解)
1.0版本的url和2.0版本的re_path分组出来的数据都是字符串类型
默认有五个转换器,感兴趣的自己可以课下去试一下
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
path('index/<str:id>/',index )
django2.0自定义转换器
需要三步走战略
# 自定义转换器
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value
register_converter(FourDigitYearConverter, 'yyyy')
urlpatterns = [
path('admin/', admin.site.urls),
# path('index/<int:id>/',index ),
# path('index/<str:id>/',index ),
path('login/<yyyy:name>/',index)
]
django 实战篇之路由层的更多相关文章
- django 实战篇之模板层
模板层 {{}} 变量相关 {%%} 逻辑相关 前端获取容器类型的数据统一使用 句点符(.) 两种给模板传递值的方式 return render(request,'index.html ...
- Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态
一.Django请求生命周期 二.路由层 urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...
- day 45 Django 的初识2 路由层,视图层,模板层
前情提要: 今天继续学习Django 的内容, 今天主要和渲染相关 1>配置路由 >2:写函数 >3 指向url 一:路由层 1:配置静态支持文件 1:路由层的简单配置 >dj ...
- Django之深入了解路由层
目录 ORM表关系建立 一对一 一对多 多对多 Django 请求生命周期 url 路由层 路由匹配 无名分组 有名分组 反向解析 路由匹配条件无分组的情况的反向解析 无名分组情况的反向解析 有名分组 ...
- django基础篇02-url路由系统
django的路由系统: 一.基本用法: 1.path('index', views.index), # 通过类的方式创建url映射 2.path('home', views.Home.as_view ...
- django 实战篇之视图层
视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...
- Django的日常-路由层
目录 Django的日常-2 路由层 有名分组和无名分组 反向解析 路由的分发 Django的日常-2 路由层 我们之前已经接触过路由层,只是我们可能不知道他叫这个名字,实际上在Django里面路由层 ...
- Django( 学习第三部 Django的url路由层)
目录 url路由层 路由匹配(有名分组与无名分组) 反向解析 路由分发 名称空间(了解) Django版本区别 url 路由匹配 注意事项: url方法,第一个参数是正则表达式,只要第一个参数能够匹配 ...
- Django学习——路由层之路由匹配、无名分组、有名分组、反向解析
路由层之路由匹配 """路由你可以看成就是出去ip和port之后的地址""" url()方法 1.第一个参数其实是一个正则表达式 2.一旦第 ...
随机推荐
- 更改电脑名称后, Cnario无法播放画面和声音, 开机后停留在桌面, Cnario Player软件界面的停止按钮为蓝色可选状态
症状描述 Cnario Player正常工作期间, 更改了电脑的Windows系统计算机名称(不是登录Windows的用户名), 重启后, 新计算机名生效. 此时Cnario自动启动, 但没有进入播放 ...
- 8 ServletContext
1 为什么需要ServletContext 技术 显示网站多少人在线,显示当前登录者是第几位登录者等信息. 2 什么是ServletContext 可以把它想象成一个服务器上的公共空间,每个用户都可以 ...
- Shell命令-系统信息及显示之uname、hostname
文件及内容处理 - uname.hostname 1. uname:显示系统信息 uname命令的功能说明 uname 命令用于显示系统信息.uname 可显示电脑以及操作系统的相关信息 uname命 ...
- nginx.conf配置详解
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
- JarvisOJ Misc webshell分析
分析压缩包中的数据包文件并获取flag.flag为32位大写md5. 神仙们还是强啊,webshell主要看http流,再过滤只剩下post请求 可以使用 http.request.method == ...
- nginx实现https网站设置
一.HTTPS简介 1.https简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密, ...
- ajax 跨域 springboot
CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 ...
- CentOS7安装jdk8及环境变量配置
下载jdk8 这里可以使用Windows下载,然后传到虚拟机 进入jdk下载页面 https://www.oracle.com/technetwork/java/javase/downloads/in ...
- BSGS与扩展BSGS
BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...
- 通过nginx访问linux目录
http { ...... autoindex on; autoindex_exact_size off; autoindex_localtime on; server { listen 80; .. ...