刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • Python基础

  • Python进阶

  • Python并发编程

  • Django

    • django 常见命令
    • Django模板母版
    • Django视图
    • Django路由系统
      • 1.正则表达式
      • 2.URLconf配置
      • 3.分组匹配
      • 4.include
      • 5.URL的命名和反向解析
        • 5.1静态路由
        • 5.2动态路由
      • 6.命名空间模式namespace
    • Django--orm系统-指令&属性
    • Django--orm系统 -分组聚合
    • Django-cookie&session
    • middleware中间件
    • Django 的身份认证系统
    • Django models 之字段详解
    • Django缓存系统
    • Django数据库系统
    • Django信号系统
    • Django序列化和反序列化
    • Django中admin用法
    • DRF 版本、认证、权限、限制、解析器和渲染器
    • DRF(Django REST Framework)框架
  • Flask

  • 爬虫

  • Python
  • Django
bigox
2021-03-22
目录

Django路由系统

# 1.正则表达式

  • r 转义符

  • ^ 以什么开头

  • $ 以什么结尾

  • \d 数字

  • \w 标识符(word)表示大小写字母,数字,下划线

  • . 表示除了换行符的任意内容

  • \d{n} 数字n表示该原字符执行次数,且只能匹配这么多次

  • \d{n,}数字n表示该原字符至少出现n次

  • \d{n,m}数字n表示该原字符至少出现n次,至多出现m次

  • \d? ?表示匹配0次或者1次 ,比如小数点

  • \d+ +表示匹配1次或多次

  • \d * *表示匹配0次或多次 ,比如匹配整数或者小数

# 2.URLconf配置

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图,参数,别名),
]

#在url传参时要以字典形式传参
urlpatterns = [
    url(r'^blog$', views.year_archive, {'foo': 'bar'}),
]
1
2
3
4
5
6
7
8
9
10
  • 正则表达式:一个正则表达式字符串

  • views视图:一个可调用对象,通常为一个视图函数

  • 参数:可选的要传递给视图函数的默认参数(字典形式)

  • 别名:一个可选的name参数

    #Django2.0版本路由系统的写法
    
    from django.urls import path,re_path
    urlpatterns = [
        path('articles/2003/', views.special_case_2003),
        path('articles/<int:year>/', views.year_archive),
        path('articles/<int:year>/<int:month>/', views.month_archive),
        path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    ]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

# 3.分组匹配

每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式

  • 分组

    • 正则表达式中加一个()表示分组

      url(r'^blog/([0-9]{4})/$', views.blogs),  #分组:将捕获的参数以元组的形式按位置传参传递给视图函数----捕获的都是字符串
      
      1
  • 命名分组

    • (?P<名称>正则表达式)

      url(r'^blog/(?P<year>[0-9]{4})/$', views.blogs),#命名分组:将捕获的参数按关键字以字典传参传递给视图函数----捕获的都是字符串
      
      1

# 4.include

  • 在协同合作开发时,每个人开发的功能不一样,就可以自定义app,运用include,灵活调用

include 包含

  1. 首先定义--项目settings同目录下的urls.py中的内容

    from django.conf.urls import include, url
    
    urlpatterns = [
    	url(r'^admin/', admin.site.urls),
    	url(r'^app_func1/', include('app_func1.urls')),  # 这种写法会指定到app_func文件夹下的urls文件
        url(r'^app_func2/', include('app_func2.urls')), 
    ]    
    
    1
    2
    3
    4
    5
    6
    7
  2. 然后再---自定义app_func中的urls.py中的内容

    #到app_func中找到urls文件进行匹配
    
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^blog/$', views.blog),
        url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.blogs),
    ]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • #首先加载settings同目录下的urls.py中的内容,匹配app_func,然后去匹配include的内容
  • #由include中的内容匹配二层地址
  • 可以创建多个urls.py文件

# 5.URL的命名和反向解析

通过自定义别名name取到完整的url路径

  • 命名的别名只能用在模板和py文件中,不能用在url中

# 5.1静态路由

  • 命名

    url(r'^blog/$', views.blog, name='blog_name'),
    
    1
  • 反向解析(在模板和py文件中用到反向解析)--通过自定义别名name取到完整的url路径

    • 模板中调用反向解析获取的url路径

      {% url'blog_name'%}    #获取到blog的完整路径  /blog_name/
      
      1
    • py文件中调用反向解析获取的url路径

      from django.urls import reverse
      reverse('blog_name')   #获取到blog的完整路径 '/blog_name/'
      
      1
      2

# 5.2动态路由

  • 分组完成动态路由

    • 自定义别名

      url(r'^blog/([0-9]{4})/(\d{2})/$', views.blogs, name='blogs'),
      
      1
    • 反向解析

      • 在模板中

        {% url 'blogs' '2222' '12' %}"   ——》  /blog/2222/12/
        
        1
      • py文件中

        from django.urls import reverse
        reverse('blogs',args=('2019','06'))   ——》 /app01/blog/2019/06/ 
        
        1
        2
  • 命名分组

    url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.blogs, name='blogs'),
    
    1
    • 反向解析
      • 模板

        #两种方式
        
        {% url 'blogs' '2222' '12' %}"   ——》  /blog/2222/12/ 
        
        {% url 'blogs' year=2222 month=12 %}"   ——》  /blog/2222/12/
        
        1
        2
        3
        4
        5
      
      - py文件中
      
        ```python
        #两种方式
        
        from django.urls import reverse
        reverse('blogs',args=('2019','06'))   ——》 /app01/blog/2019/06/ 
        
        reverse('blogs',kwargs={'year':'2019','month':'06'})   ——》 /app01/blog/2019/06/ 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

# 6.命名空间模式namespace

作用:即使不同的APP使用相同的URL名称,URL的命名空间模式也可以反向解析命名的URL。

  • 定义时在setting同目录下的urls.py中写入

    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]
    
    1
    2
    3
    4
    5
  • 调用时在别面馆前面加上namespace 名称

    • 在模板中

      {% url 'app01:blogs' 2222 12 %}
      
      1
    • 在py文件中

      reverse('app01:blogs',args=('2019','06'))
      
      1
#Python#
上次更新: 2023/04/16, 18:35:33
Django视图
Django--orm系统-指令&属性

← Django视图 Django--orm系统-指令&属性→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2024 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式