45.1、django URLconf 路由系统介绍:

1、说明:

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表,

你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

2、代码格式:

(1)格式:

from django.contrib import admin

from django.conf.urls import url,include

from app01 import views

urlpatterns = [

url(正则表达式, views视图函数, 参数, 别名),

]

(2)参数说明:

一个正则表达式字符串

一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串

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

一个可选的name参数

45.2、URLconf 基本配置示例:

1、urls.py 文件配置:

from django.contrib import admin

from django.conf.urls import url,include

from app01 import views

urlpatterns = [

url(r'^articles/2003/$', views.special_case_2003),

#完全匹配

#def special_case_2003(request):

url(r'^articles/[0-9]{4}/$', views.year_archive, {'year':'2020'}),

#匹配任意四个数字及自定义参数传递(后台参数接收名称必须和传入参数名称保持一致)

#year_archive(request,year):

url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.year_month_archive),

#无名分组,后台参数接收名称不必和传入参数名称保持一致

#year_month_archive(request,y,m):

url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),

#有名分组,后台参数接收名称必须和传入参数名称保持一致

#def article_detail(request,year,month,day):

]

2、settings.py APPEND_SLASH参数说明:

(1)Django settings.py 配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为

APPEND_SLASH = True。

1)APPEND_SLASH = True 的情况下:

先会根据前端传来的url,先检测这个 url 能不能访问资源,如果可以访问的话,那么就去执行相应的业务代

码,最后返回。如果这个 url 不能访问到资源的话,会判断这个 url 最后有没有"/",有"/"的话,则返回 404

错误,如果没有 "/" 的话,便会帮你加上"/",生成一个新的 url,再去检测这个新的 url 能不能访问到资源,

如果能访问的话,则返回 301 的状态码,并将这个新的 url 传到前端,进行重定向操作,如果这个新的 url

还是不能访问到资源的话,也会返回 404 错误。

小结:如果请求 URL 与 URLconf 中的任何模式都不匹配,则会将 HTTP 重定向发送到同一网址并附加斜杠。

重定向可能导致 POST 请求中提交的所有数据丢失,所以在调用 url 时,是否要加"/",与 URLconf 要保持

一致,如果不想要 url 后面的"/",可以在 URLconf 中定义成 "r'^<字符>$'" 完全匹配的形式。

2)APPEND_SLASH=False 的情况下(需要清下浏览器的缓存):

django 不会自动帮你在 url 后面加"/",你前台传怎样的 url,那就用这个 url 去访问资源,能不能访问还得

看你 url 对不对。

(2)示例:

1)如下URL视图:

from django.conf.urls import url,include

from app01 import views

urlpatterns = [

url(r'^hello/$', views.hello),

]

2)因定义了 hello/ 结尾,所以:

http://127.0.0.1:8080/hello

会自动转到

http://127.0.0.1:8080/hello/

3)当 settings.py 设置为 APPEND_SLASH = False 时:

访问 http://127.0.0.1/hello 将会返回 404。

(3)补充:url 的匹配规则:

url 和 URLconf 的匹配是从上往下的惰性匹配,如果 url 和 URLconf 中的一个资源匹配成功,

就不会往下再匹配了。

例如:用 http://127.0.0.1:8080/articles/2003/、http://127.0.0.1:8080/articles/2003/1/

去匹配下面两个资源,结果都是匹配第一个资源,为了避免这种情况,在 URLconf 中定义成

"r'^articles/2003/$'"、"r'^articles/2003/1/$'" 的形式进行 url 的完全匹配。

-------------------------------------------------------------------------------------------------------------

url(r'^articles/2003/', views.special_case_2003),

url(r'^articles/2003/1/', views.year_archive),

45.3、URLconf 别名:

1、主要由项目内部模板文件调用。使用 URLconf 别名的好处是:为了 URLconf 的更改不会影响前端

的引入,避免造成前端大量修改。

2、示例:

(1)urls.py:

from django.conf.urls import url,include

from app01 import views

urlpatterns = [

url(r'^login/$', views.login, name='login_alias'),

url(r'^index/$', views.index),

]

(2)views.py:

from django.shortcuts import render,HttpResponse,redirect

def login(request):

if request.method == 'POST':

name = request.POST.get('username')

pwd = request.POST.get('pwd')

if name =='root' and pwd == "123456":

return redirect("/index/")

#重定向,是一个url地址,完整的格式为 http://127.0.0.1:8080/inedx/,

#当前为缩写,浏览器上显示的 URL 不再是开始时请求的那个 URL了。

return render(request,'login.html')

#render 返回的是 templates 目录下的经 django 渲染的 html 页面,浏览器上显示

#的 url 地址不会改变。

def index(request):

return HttpResponse('login success! This is index.html')

#1、login 函数的逻辑为,对用户的访问判断是 get 请求还是 post 请求。

#2、用户打开登录界面时为 get 请求返回 login.html 登录页面。

#3、用户输入用户名和密码进行提交是 post 请求,如果用户名和密码验证成功重定向到 URLconf

#中的 url(r'^index/$', views.index), 用户浏览器 URL 地址发生改变,如果用户名和密码

#验证失败则返回登录 login.html 页面,用户浏览器的 URL 地址不发生改变。

(3)login.html (使用别名):

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

</head>

<body>

<form action="{% url 'login_alias' %}" method="post">

{% comment %}

调用 url 别名,不使用别名的方式是 action="/login/"

/login/:表示的是一个 url 地址,django会自动在最左边的

斜杠前加上当前项目的绑定的ip地址和端口号,变成

http://127.0.0.1:8080/login/ 的形式,其中 login/ 代表

的是 URLconf 中配置的 r'^login/$' 资源地址。

{% endcomment %}

{% csrf_token %}

{#解决表单 post 请求 csrf 验证报错问题#}

<div><input type="text" name="username"></div>

<div><input type="password" name="pwd"></div>

<div><input type="submit" value="submit"></div>

</form>

</body>

</html>

45.4、包括其它 URLconf 的 URLconf配置(url 路由分发):

1、说明:

该配置需要在项目不同的应用程序下创建 urls.py,在主 urls.py 文

件中配置分发设置。好处是防止所有的 URLconf 都配置在主

urls.py 一个文件中,方便开发人员进行维护,避免因一个

URLconf 配置错误而导致所有的项目应用程序都无法使用。

2、示例:

(1)在项目应用程序 app01 下创建 urls.py 文件。

(2)主 urls.py 配置:

from django.conf.urls import url,include

urlpatterns = [

url(r'^blog/', include('app01.urls')),

]

(3)应用程序 app01 下的 urls.py 配置:

from django.conf.urls import url

from app01 import views

urlpatterns = [

url(r'^index/$', views.index),

]

3、补充:

为避免所有的视图函数都写在项目应用程序下 views.py 一个文件中不好维护,应该在

项目下每个应用程序文件夹下创建一个 views 目录来存放应用程序因需求不同所用视

图函数的 .py 文件,在 urls.py 中调用视图函数时只要用

from <项目应用程序名>.<存放视图函数的 .py 文件的目录> import <存放视图函数的 .py文件>。

45、django工程(URLconf)的更多相关文章

  1. Django工程的建立以及小网站的编写

    这篇博文会详细的介绍如何创建django工程,介绍我如何做了第一个网站.本文基于windows7安装了python2.7.12,Django1.8.18(LTS)版.采用的IDE为pycharm.建议 ...

  2. Django工程读取mongodb并使用分页器

    pycharm开发django工程(二) 项目需求: 1. 从mongodb中读取数据,并显示到网页中 2. 在网页显示的每一页加入分页符 首先使用pycharm的企业版新建一个django的虚拟工程 ...

  3. Django工程搭建

    -----环境安装 1.创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3   2.安装django pip install django==1.11.11 ...

  4. python web框架 django 工程 创建 目录介绍

    # 创建Django工程django-admin startproject [工程名称] 默认创建django 项目都会自带这些东西 django setting 配置文件 django可以配置缓存 ...

  5. django学习笔记【001】django版本的确定&创建一个django工程

    2.3 查看当前的django版本 python3. -m django --version 2.3.1 创建一个django工程 django-admin startproject mysite 在 ...

  6. Django工程目录结构优化

    1.我看到这篇文章,写的不错,在此复制了一份,防止以后找不到! 感谢作者的翻译--->原文的链接:http://www.loonapp.com/blog/11/ 如果原文存在,请打开原文件阅读 ...

  7. Django工程创建

    方法一: 1.win+r进入cmd命令窗口: 2.找到Django的安装地址: 3.cmd窗口中利用cd 进入相应的文件夹,再输入命令如下: django-admin.exe startproject ...

  8. Django基于Pycharm开发之一【创建django工程】

    Django的工程结构,可以通过pycharm里面,选择创建django工程来直接创建,也可以通过命令行通过pip来安装. 一.通过命令行安装的步骤 Install Python. Install a ...

  9. Django系列:(1)PyCharm下创建并运行我们的第一个Django工程

    准备工作: 假设读者已经安装好python 2x或3x,以及安装好Django,以及Pycharm. 我的配置: – Python 2.7.11 – Pycharm Professional 5.0. ...

随机推荐

  1. AD命令获取计算机、用户相关信息

    1. 获取AD用户相关信息(用户名.创建日期.最后修改密码日期.最后登录日期) Get AD users, Name/Created Date/Last change passwd Date/Last ...

  2. zabbix监控之自动发现/自动注册

    一.自动发现 1.概述 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,zabbix可以在你的机器上自动开始监控文件系统或者网络接口,而无需为每个文件系统或网 ...

  3. 安全漏洞扫描工具 burpsuite V1.7.32 资料

    安装包下载地址:http://www.downxia.com/downinfo/229728.html 实战教程:https://t0data.gitbooks.io/burpsuite/conten ...

  4. 3.1 cat:合并文件或查看文件内容

    cat 命令 可以理解为英文单词concatenate的缩写,其功能是连接多个文件并且打印到屏幕输出,或者重定向到指定的文件中.此命令常用来显示单个文件内容,或者将几个文件内容连接起来一起显示,还可以 ...

  5. 技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

    前言 在部分场景下,需要向小程序的默认接收页(pages/index/index)传递参数. 本文将以传递 name 和 pwd 参数为例,分别介绍此场景在 Android 小程序和 iOS 小程序中 ...

  6. spark_shuffle方式的演进过程

    spark shuffle有四种方式,分别是 hashshuffle 优化后的hashshuffle sortshuffle bypass 一.hashshuffle与优化 一开始spark的shuf ...

  7. 加载动画效果 HTML+ CSS

    加载动画效果 写在前面 在无限的时间的河流里,人生仅仅是微小又微小的波浪.--郭小川 实现效果 实现原理 通过2个伪元素来设置3条颜色边框 通过定位将3个圆弧边框层叠再一起,再通过旋转实现一个圆的效果 ...

  8. [leetcode] 48. 旋转图像(Java)(模拟)

    48. 旋转图像 模拟题,其实挺不喜欢做模拟题的... 其实这题一层一层的转就好了,外层转完里层再转,其实就是可重叠的子问题了. 转的时候呢,一个数一个数的转,一个数带动四个数.如图所示,2这个数应该 ...

  9. 永远的Ace 实验五 团队作业2:XXX企业设施设备云上资料室

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ...

  10. CVPR2020论文介绍: 3D 目标检测高效算法

    CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...