Django基础之路由(urls)层

无名分组与有名分组

无名分组

对于正则加括号,会将括号内匹配到的内容当做位置参数传递给后面的视图函数test(request,args)

eg:

url(r'^test/(\d+)/',views.test)

有名分组

就是给正则起个别名

会将括号内匹配到的内容当做关键字参数传递给后面的视图函数test(request,month=123)

这个month也可以是其他值

eg:

url(r'^test/(?P<month>\d+)/',views.test)

注意

有名分组和无名分组不能结合使用,但是无名和有名分组单独使用的情况下可以使用多次,就是一个里面有多个分组

eg:

url(r'^test/(\d+)/(\d+)/',views.test)
url(r'^test/(?P<month>\d+)/(?P<month>\d+)/',views.test)

反向解析

根据某一个东西,动态解析出一个结果,该结果可以直接访问对应的url

怎么去做呢?

答:给路由与视图函数对应关系起一个别名,后续根据这个别名就能够动态解析出对应的url

eg:

url(r^test_add/',testadd)

前段解析

{%url 'xxx' %}

后端解析

导入模块

import revers
url = revers('xxx')

无名分组反向解析

url(r'^test_addsajdsjkahdkjasjkdh/(\d+)/', views.testadd,name='xxx')

前段解析

在模版login.html文件中,反向解析的使用
<a href="{% url 'xxx' 1 %}">222</a>

后端解析

在views.py中,反向解析的使用:
url = reverse('xx',args=(1,))

有名分组的反向解析

url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>\d+)/', views.testadd,name='xxx')

前段解析

<a href="{% url 'xxx' 1 %}">222</a>
<a href="{% url 'xxx' year=1 %}">222</a>

后端解析

url = reverse('xxx',args=(1,))

路由分发

eg:Django有100个app,那urls里面的代码过于冗长

Django里面的APP可以有自己的templates文件夹,static文件夹,和urls.py文件

总路由项目名下的urls.py不再做路由与视图函数对应关系了,而是做一个中转站,只负责将请求分发到不同的app中,在app中做视图函数的对应关系

具体操作:

from django.conf.urls import url,include

url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls))

名称空间

当我们的项目下创建了多个app,并且每个app下都针对匹配的路径起了别名,如果别名存在重复,那么在反向解析时则会出现覆盖,但是我们尽量不要重名

总路由

url(r'^app01/',include('app01.urls',namespace='app01'))
url(r'^app02/',include('app02.urls',namespace='app02'))

各个app的路由

print(reverse('app01:index'))
print(reverse('app02:index'))

伪静态

将动态网页假装成是静态的,这样做的目的是为了提高百度等搜索引擎的SEO查询优先级

搜索引擎在收录网站的时候,会优先手撸看上去像是静态文件的资源

无论你怎么使用伪静态进行优化,都干不过RMB玩家

哈哈哈!!!

虚拟环境

通常针对不停地项目,只会安装该项目所用到的,用不到的一概不装

不同的项目有专门的解释器环境与之对应

每创建一个虚拟环境,就类似于重新下载了一个python解释器

实际功能中针对不同而项目,有一个交叫requestments.txt,该文件列出来的是一个个该项目需要用到的模块名和版本号

eg:

Django=1.11.11

nginx

后期会通过命令直接会去下载该文件内所有的模块及对应的版本

虚拟环境不要创建太多个,会占硬盘资源的操作

Django1版本和Django2 版本的区别

Django1.x

区别一:

urls.py中1.x用的是url,2.x用的是path

2.x中的第一个参数不支持正则表达式,些写什么就匹配什么

2.x里面还有re_path,这个re_path就好比1.x中的url

区别二:

django2.x默认支持一下5种转换器(Path converters)

str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

例如

path('articles/<int:year>/<int:month>/<slug:other>/', views.article_detail)
# 针对路径http://127.0.0.1:8000/articles/2009/123/hello/,path会匹配出参数year=2009,month=123,other='hello'传递给函数article_detail

Django基础之路由(urls)层的更多相关文章

  1. Django基础之视图(views)层、模板层

    目录 Django基础之视图(views)层.模板层 JsonResponse 向前端返回一个json格式字符串的两种方式 重写Django中的json的某个方法 form表单上传文件 FBV与CBV ...

  2. Django基础之模型(models)层(上)

    目录 Django基础之模型(models)层 单表查询 必知必会13条 神奇的双下划线查询 多表查询 外键的字段的增删改查 表与表之间的关联查询 基于双下划线的跨表查询(连表查询) 补充知识 Dja ...

  3. Django基础之路由层

    内容概要 路由匹配 无名有名分组 反向解析 无名有名分组反向解析(难理解) 路由分发 名称空间 伪静态 内容详细 1 路由匹配 urls.py url()方法第一个参数其实是一个正则表达式 第一个参数 ...

  4. Django基础(路由、视图、模板)

    目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...

  5. Django基础之路由系统

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

  6. Django基础三之路由、视图、模板

    Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...

  7. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  8. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  9. day 66 Django基础二之URL路由系统

    Django基础二之URL路由系统   本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11 ...

随机推荐

  1. 微信小程序_(校园视)开发用户注册登陆

    微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...

  2. shell编程-定时删除(30天)文件

    1.创建shell touch /opt/auto-del-30-days-ago.sh chmod +x auto-del-30-days-ago.sh 2.编辑shell脚本: vi auto-d ...

  3. 【python / mxnet / gluoncv / jupyter notebook】基于mxnet和gluoncv的图像内容识别

    程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 In  ...

  4. [Java]用于将链表变成字符串并在元素之间插入分隔符的有用函数“String.join”

    将链表变成字符串并在元素之间插入分隔符,这种动作最常见于组合sql文“select a,b,c from tb”这种场景scenario,其中a,b,c你是存贮在链表中的, 如果要加逗号要么在循环中识 ...

  5. js evenloop

    一.宏任务 vs 微任务 1.macrotask setTimeOut . setInterval . setImmediate . I/O . 各种callback.UI渲染等 优先级: 主代码块 ...

  6. Orcal nvl函数

    NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身.但此函数有一定局限,所以就有了NVL2函数. 拓展:NVL2函数:Oracle/PLSQL中的一个函数,Oracl ...

  7. python3 http.server 本地服务支持跨域

    创建start.py,代码如下: #!/usr/bin/env python try: # Python 3 from http.server import HTTPServer, SimpleHTT ...

  8. 操作系统-Windows:UWP(Universal Windows Platform)

    ylbtech-操作系统-Windows:UWP(Universal Windows Platform) 1.返回顶部 1. UWP即Windows 10中的Universal Windows Pla ...

  9. layui弹出层处理(获取、操作弹出层数据等)

    要点: 字符串被渲染为弹窗层之后,回自动转换为DOM,可以使用jq进行各种操作 <!DOCTYPE html> <html> <head> <meta cha ...

  10. python programming作业11 Qt designer (打地鼠,不是很完美)

     不导包的代码 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtWidgets import QApplicati ...