django框架之二 --APP,路由系统
Django简介
Django框架简介
MVC框架和MTV框架(了解即可)
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

想要更详细的了解MVC模式? >> 点我
Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。
Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
Django的MTV模式
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
Django框架图示

APP
一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。
命令行创建
切换到项目目录下
python manage.py startapp app01
使用PyCharm创建

在下方弹出的命令窗口输入:
startapp app01
文件结构

路由系统
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。
你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。


基本格式
from django.conf.urls import url
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
注意:
Django 2.0版本中的路由系统已经替换成下面的写法(官方文档):
from django.urls import 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),
]
参数说明
- 正则表达式:一个正则表达式字符串
- views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 参数:可选的要传递给视图函数的默认参数(字典形式)
- 别名:一个可选的name参数
正则表达式
注意事项
- urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
- 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
- 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
- 每个正则表达式前面的'r' 是可选的但是建议加上。
补充
# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项 APPEND_SLASH=True
分组命名匹配
用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。


,
在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。
传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。


视图函数中使用默认值


URLconf匹配的位置
URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。
接上图

include其他的URLconfs
首先要导入include
from django.conf.urls import include, url #他与url在一起
主文件中的urls

APP中的urls

使用时

使用其他的URLconfs时,主文件匹配的开头,APP匹配的其他部分,只要是以匹配的那个开头的,便交给指定的APP中的urls去处理,
如果导入了多个APP中的urls就需要起别名
看图

下面不行

传递额外的参数给视图函数(了解)
URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数。

浏览器内容

命名URL和URL反向解析
在views函数中简单使用

浏览器中

带参数
有名字的kwargs={}

浏览器中

在模板中使用
语法{% url "url的名字" %}
带参数的{% url "url的名字" arg1 arg2 %} 按顺序用空格隔开
实例
urls

ceshi.html -->可以将他替换进a标签,或者form表单的处理url中,这个参数可以通过后台的render()函数传参

浏览器中

应用
在其他地方使用url时个个位置不必写死,使用reverse("url的名字")来动态的使用
当urls中的url修改时,不必再去别的地方修改
命名空间模式namespace
include请求的不同的URLconfs中的url的name本身是不可以相同的,可以通过设置namespace来生成不同的命名空间
主urls文件

app01中的urls以及函数

app02中的urls以及函数

app01打开的html文件

浏览器结果
/app01/date/

/app02/date/

演示一下没有名称空间的结果





两个url输出相同,


浙公网安备 33010602011771号