首页 > 其他分享 >Django路由层

Django路由层

时间:2022-11-27 21:45:28浏览次数:58  
标签:urls views url Django 分组 app02 test 路由

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的文件,里面存有该项目需要的所有的模块及对应版本

标签:urls,views,url,Django,分组,app02,test,路由
From: https://www.cnblogs.com/missfxy/p/16930669.html

相关文章

  • Django版本差异
    Django版本差异#一、路由层'''django1.x路由层使用url方法django2.x/3.x路由层使用path方法可以根据习惯使用re_pathpath方法支持5种转换器'''fromdjango.ur......
  • Django-ORM简介
    DjangoORM目录DjangoORM字段的增删改查数据的增删改查创建表关系null#即对象关系模型#类——表#对象——记录#对象属性(值)——记录某个字段(值)#在models.py中写......
  • 学习笔记-Django框架的使用
    前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出!!!一.安装和创建项目1.安装1.1命令行下载pip3installdjango==1.11.11 (可以跟镜像地址:-i+镜像地址......
  • spring gateway路由出现503、404错误解决方法
    查资料发现在网关出现503错误是因为全局过滤器没有加载(ReactiveLoadBalancerClientFilter),只需要将含有这个过滤器的依赖进行导入就行了<dependency><groupId>org.......
  • django 定时任务 Error: no such table: django_apscheduler_djangojob
    使用django的定时任务一般出现各种问题例如找不到这个注册表或者urls不存在等etc....版本不兼容我的版本django2.2.8django_apscheduler==0.2.12APScheduler~......
  • 【面试题】 面试官为啥总是喜欢问前端路由实现方式?
    背景从事前端开发的同学,在实际工作中,一定会接触过路由这个概念,同时在面试的过程中,经常会被问及关于前端路由的实现方式,面试官到底想考察什么?在现在SPA单页面模式盛行,前后端......
  • django之ModelForm配合Select2之用法
    django在开发时有很强大的功能,但是有一些功能还是不够的,django给我们强大的自增强功能。Select2https://select2.org开发时可以直接使用CND:<linkhref="https://cdn.j......
  • 解决Django的【LookupError: No installed app with label ‘admin‘】
    其实这个问题比较好解决:1、首先debugmain函数,定位你的问题,我这边的问题是报这个错误;'ErrorloadingMySQLdbmodule.\n''Didyouinstallmysqlclient?'  2、针对......
  • 动态路由---OSPF数据包和状态
    1.RouterID先看回环口,再看物理接口手动配置<Huawei>sys[Huawei]ospf1router-id1.1.1.1说明: 这个ID看起来像一个IP地址,但是跟设备的接口地址是没有关系的,可以......
  • 动态路由---OSPF基础概念
    1.OSPF概述OpenShortestPathFirst,开放最短路径优先大中型网络上使用最为广泛的IGP协议链路状态路由协议无类使用组播(224.0.0.5和224.0.0.6)收敛较快以开销(Cost)作......