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. 【面试】SSH 框架原理

    SSH 框架原理: 1.通过 Configuration().configure();读取并解析 hibernate.cfg.xml 配置文件2.由 hibernate.cfg.xml中的<ma ...

  2. 20175215 2018-2019-2 第十周java课程学习总结

    第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...

  3. 修改PostgreSQL数据库的默认用户postgres的密码 并新建用户

    1.忘记了postgresql 安装时默认用户postgres 的密码,怎么办呢? linux shell命令下面输入: sudo -u postgres psql  (这样就可以直接登录进postg ...

  4. [转]java常量池理解总结

    一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池在Clas ...

  5. Windows上配置Mask R-CNN及运行示例demo.ipynb

    最近做项目需要用到Mask R-CNN,于是花了几天时间配置.简单跑通代码,踩了很多坑,写下来分享给大家. 首先贴上官方Mask R-CNN的Github地址:https://github.com/m ...

  6. Win10怎样显示此电脑

    1.在桌面空白处右击鼠标,在出现的选项框中选择“个性化”按钮: 2.在打开的页面中选择左侧的“主题”选项,在右侧选择“桌面图标设置”: 3.在弹出的小窗口中勾选“计算机”,点击“确定”,回到桌面即有此 ...

  7. 连续子数组的最大和 java实现

    package findMax; /** * 连续子数组的最大和 * @author root * */ public class FindMax { static int[] data = {1,- ...

  8. SQL学习(五)多表关联-join

    在实际工作中会用到多表联查,此时需要用到关键字JOIN 一.inner join(内连接) 至少有一个匹配时返回行,只返回两个表中连接字段相等的行 如: select * from ticket in ...

  9. pyqt5 工具栏文字图片同时显示

    import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGu ...

  10. libvirt报错总结

    libvirt 的一些报错总结 出现Permission denied error: internal error process exited while connecting to monitor ...