Django进阶-路由系统

概述

URL配置就像Django所支撑网站的目录
本质:URL与视图函数的映射表

Django2.0

from django.urls import path
url 换成了 path

基本格式

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
正则表达式:        一个正则表达式字符串
views视图函数:        一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
参数:                可选的要传递给视图函数的默认参数(字典形式)
别名:                一个可选的name参数

通过URL给视图函数传参

分组匹配和分组命名匹配, 一个正则规则里只能选一个

通过?传值

<a href="/del_publisher/?id={{ publisher.id }}" class="btn btn-danger">删除</a>

取值

request.GET.get("id", None)

def del_publisher(request):
    print(request.GET)
    del_id = request.GET.get("id", None)        # 获取到用户要删除的数据的ID
    if del_id:
        del_obj = models.Publisher.objects.get(id=del_id)     # 找到要删除的那条数据
        del_obj.delete()          # 删除找到的那条数据
        return redirect("/publisher_list/")     # 返回到出版社列表的页面
    else:
        return HttpResponse("找不到要删除的数据")

views

分组匹配(按位置传)

url(r‘^test30/([a-zA-Z]+)/(\d+)/$‘, views.test20)

视图函数里按照位置接收

def test20(request, name, id):        # name是第一个分组, id是第二个分组
    return HttpResponse("name:{} id:{}".format(name, id))

views.py

分组命名匹配

url(r‘^test20/(?P<name>[a-zA-Z]+)/(?P<id>\d+)/$‘, views.test20)

视图函数里按照关键字接收

def test20(request, name, id):        # name是第一个分组, id是第二个分组(这里的name,id反过来写也无所谓)
    return HttpResponse("name:{} id:{}".format(name, id))

views.py

视图函数中指定默认值

# urls.py中
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r‘^blog/$‘, views.page),                        # 当匹配到这个URL的时候,去做默认值的操作
    url(r‘^blog/page(?P<num>[0-9]+)/$‘, views.page),    # 当匹配到这个URL的时候,去做获取的到num相关的操作
]

# views.py中,可以为num指定默认值
def page(request, num="1"):
    pass

通过对应关系给视图函数传参

url(r‘^test40/([a-zA-Z]+)/(\d+)/$‘, views.test40, {"age": 998})

视图函数里按照关键字接收

def test40(request, name, id, age):        # name id 是按照分组传进来的 age 是通过对应关系传进来的
    return HttpResponse("name:{} id:{} age:{}".format(name, id, age))

views.py

命名URL和URL反向解析

本质上就是给url匹配模式起【别名】,然后url跳转时(a标签/重定向)用过别名拿到具体的URL路径

1, 不带参数版本

url(r‘^home‘, views.home, name=‘home‘),          # 给我的url匹配模式起名为 home

在模板里引用

{% url ‘home‘ %}

在views视图里引用

from django.urls import reverse

reverse("index")

2, 带参数版本

url(r‘^index/(\d*)‘, views.index, name=‘index‘),          # 给我的url匹配模式起名为index

在模板里引用

{% url ‘index‘ ‘实参1‘ ‘实参2‘ %}

在views视图里引用

from django.urls import reverse

# 按位置传的参数
reverse("index", args=("实参1", "实参2", ...))

# 按关键字传的参数
reverse("index", kwargs={"形参1": "实参1", "形参2": "实参2", "形参3": "实参3"}, ...)

命令空间

即使不同的APP使用相同的URL【别名】,URL的命名空间模式也可以让你唯一反转命名的URL。

例子

project中的urls.py

from django.conf.urls import url, include
import app01
import app02

urlpatterns = [
    url(r‘^app01/‘, include(‘app01.urls‘, namespace=‘app01‘)),
    url(r‘^app02/‘, include(‘app02.urls‘, namespace=‘app02‘)),
]

app01中的urls.py

from django.conf.urls import url
from app01 import views

app_name = ‘app01‘
urlpatterns = [
    url(r‘^(?P<pk>\d+)/$‘, views.detail, name=‘detail‘)
]

app02中的urls.py

from django.conf.urls import url
from app02 import views

app_name = ‘app02‘
urlpatterns = [
    url(r‘^(?P<pk>\d+)/$‘, views.detail, name=‘detail‘)
]

现在,我的两个app中 url名称重复了,我反转URL的时候就可以通过命名空间的名称得到我当前的URL。

语法:  ‘命名空间名称:URL名称‘  

模板中使用

{% url ‘app01:detail‘ pk=12 pp=99 %}

views中的函数中使用

v = reverse(‘app01:detail‘, kwargs={‘pk‘:11})

原文地址:https://www.cnblogs.com/sunch/p/9735689.html

时间: 2024-08-29 17:24:44

Django进阶-路由系统的相关文章

Django之 路由系统

Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式 ''' urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 可选的要传递给视图函数的默认参数(字典形式) 一个

Django 的 路由系统

Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于这个URL 调用这段代码,  对于那个URL 调用那段代码. URLconf配置 基本格式: from django.conf.urls import url urlpatterns= [ url(正则表达式,views视图函数, 参数, 别名) ] 注意: Django 2.0版本中的路由已经替换

Django - - 基础 - - Django的路由系统

模板 Django的路由系统 URLconf配置 正则表达式详解 分组命名匹配 传递额外的参数给视图函数(了解) 命名URL和URL反向解析 命名空间模式 1, Django的路由系统 Django 1.11版本 URLConf官方文档:https://docs.djangoproject.com/en/1.11/topics/http/urls/ URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.1 URLconf配

python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] ? 正则表达式: 一个正则表达式字符串 views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 参数: 可选的要传递给视图函数的默认参数(字典形式) 别名: 一个可选的name参数 12.361 路由正则表达式 from django.conf.urls imp

Django之路由系统

前言: Django的工作流程 1.客户端发送请求到达 URL 2.路由系统 把客户端请求转发给请求函数 3.视图函数 使用原生SQL或者ORM去数据库拿到数据进行渲染(模板+数据渲染)4.return 返回给客户端 Django project目录中的urls.py文件中 记录了 可以访问到该站点的url 和 视图函数的对应关系,神似路由器中的路由表,顾淫王赐名----->路由系统; 本文主要介绍 Django路由系统(此乃淫王 赐名,暂且这样称呼!) 一.普通路由系统 1个URL对应1个视图

django的路由系统

在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url,include 默认包含一个路由信息 r'^admin/'site.urls), 一个工程至少要包含一个app,而django中的mtv模式,view层相当于视图控制层,即相当于mvc中的controller,template相当于视图层,model层为数据处理层,当请求到达时将到时达指定的vie

五、Django之路由系统

1.普通路由匹配 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:它就是以这种方式告诉Django,用哪个URL调用哪段代码.URL的加载是从配置文件中开始. urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 可选的要传递给视图函数的默认参数(字典形式) 一个可选的nam

Django -- 路由系统

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:sl

Django的View(视图)和路由系统

Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.除此之外没有更多的要求了--可以说"没有什么神奇的地方".为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.