Django路由层

路由匹配

# url方法第一个参数是正则表达式,并且按顺序匹配视图函数
url(r'test', views.test),
url(r'testxxx', views.testxxx),

# 使用'/'来阻止此类情况
url(r'test/', views.test),
url(r'testxxx/', views.testxxx),

# 当用户输入的url后缀缺少'/'时,django自动加斜杠

# 取消自动加斜杠 settings.py
APPEND_SLASH = False

# 使用'^'和'$'来规范路径
url(r'^test/$', views.test),
url(r'^testxxx/$', views.testxxx),

# 匹配首页
url(r'^$', views.test),

# 匹配404
使用异常捕获比较靠谱

无名分组

# 分组,即使用'()'包括某一段正则表达式
url(r'^test/(\d+)/', views.test),
# url函数会将第一个参数中使用'()'独立分组的正则表达式也作为位置参数传入视图函数

有名分组

url(r'^test/(?P<re_name>\d+)/', views.test),
# 即将'()'内正则表达式以其别名为关键字作为关键字参数传入视图函数
# 无名分组与有名分组不能混用,但可以重用

反向解析

# 通过某些方法直接访问路由中设置的url触发视图函数 eg: 通过给url传入第三个关键字参数'name='为当前路径设置别名,然后通过前段或者后端使用别名替换直接路径实现路径在各个文件间解耦合效果,别名不能冲突
url(r'^something/', views.something,name='反向解析尝试'),

# 前端反向解析
<a href="{% url '反向解析尝试' %}">去something页面1</a>

# 后端反向解析 views.py
from django.shortcuts import render, HttpResponse, redirect, reverse

reverse('反向解析尝试') # 返回路由中对应的url

无名分组反向解析

url(r'^re_test/(\d+)/', views.re_test, name='re_test1'),
# 无名分组后端反向解析,即:将可以匹配到'()'内正则的值作为args参数传入reverse()函数,一般我们可以用数据主键值
def home(request):
    print(reverse('re_test1',args=(1,)))
    return render(request,'home.html')
# 无名分组前端反向解析,类似于后端,在引用url别名处添加可以匹配到'()'内正则的值,一般我们可以用数据主键值
<a href="{% url 're_test1' 1 %}">去something页面1</a>

有名分组反向解析

url(r'^re_testx/(?P<age>\d+)/', views.re_test2, name='re_test2'),
# 有名分组后端反向解析
print(reverse('re_test2', kwargs={'age':1})) # 或
print(reverse('re_test2',args=(1,)))
# 有名分组前端反向解析
<a href="{% url 're_test2' age=1 %}">去something页面1</a> #或
<a href="{% url 're_test2' 1 %}">去something页面1</a>

路由分发

# 每一个应用都可以有自己的templates文件夹、urls.py、static文件夹
# 项目urls.py配置(基础方式)
from django.conf.urls import url, include
from app02 import urls as app02_urls 
from app03 import urls as app03_urls
urlpatterns = [
    url(r'^app02/',include(app02_urls)),
    url(r'^app03/',include(app03_urls))
]
# 项目urls.py配置(简单方式)
from django.conf.urls import url, include
urlpatterns = [
    url(r'^app02/',include('app02.urls')),
    url(r'^app03/',include('app03.urls'))
] # Django会自动获取各应用下的urls文件路径,当为include直接传入字符串值时,会识别为导入路径

# 注意:总路由下url不可以使用'$'限制结尾

# 在每个应用下新建urls.py
from django.conf.urls import url

from app02 import views # 注意导入本项目views

urlpatterns = [
    url(r'^jiliguala/', views.jiliguala, name='app02_jiliguala'),

]

from django.conf.urls import url

from app03 import views # 注意导入本项目views

urlpatterns = [
    url(r'^jiliguala/', views.jiliguala, name='app03_jiliguala'),

]
# 实现各APP内路由函数
from django.shortcuts import render, HttpResponse, redirect

# Create your views here.
def jiliguala(request):
    return HttpResponse('app02_jiliguala')

from django.shortcuts import render, HttpResponse, redirect

# Create your views here.
def jiliguala(request):
    return HttpResponse('app03_jiliguala')

名称空间

# 当多个应用下的url别名重复时,反向解析不能自动识别该url的应用前缀

# 总路由设置
urlpatterns = [
    url(r'^app02/',include(app02_urls, namespace='app02')),
    url(r'^app03/',include(app03_urls, namespace='app03'))
]
# 反向解析
reverse('app02:jiliguala')
<a href="{% url 'app02:jiliguala' %}">jiliguala</a>

# 一般情况下,我们这样设置url别名:appname_别名

伪静态

# 即将一个动态网页伪装成一个静态网页
# 目的是增大本网站的SEO查询力度,增加被搜索引擎收藏的几率

虚拟环境

# 在一般开发中,我们会给每一个项目配备一个该项目独有的解释器环境,该环境内只有该项目用到的模块。
# 项目会配备一个requirements.txt的文件,里面存有该项目需要的所有的模块及对应版本

原文地址:http://www.cnblogs.com/missfxy/p/16930669.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性