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参数

正则表达式

注意事项

  1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
  2. 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
  3. 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  4. 每个正则表达式前面的'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输出相同,

 

 

posted @ 2018-01-17 22:18  瓜田月夜  阅读(162)  评论(0编辑  收藏  举报