Django的url解析
Django中采用正则表达式来匹配所请求的url,这个叫做URLconf,作为MVC中的C(控制器),
这样再调用相应的试图,达到控制器控制试图的显示的效果。
看一下Django的url解析过程
第一步:
我的项目叫做mysite,结构如下:
zhang@h:~/workspace/python-web$ tree mysite/
mysite/
├── hello
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── templates
│ │ └── base_site.html
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
└── polls
├── admin.py
├── admin.pyc
├── __init__.py
├── __init__.pyc
├── models.py
├── models.pyc
├── tests.py
├── urls.py
├── urls.py~
├── urls.pyc
├── views.py
└── views.pyc
其中,hello文件是sqlite3生成的sql文件,有一个模块polls
当在地址栏输入http://localhost:8000/polls/34
Django会加载由mysite/settings.py文件指定的ROOT_URLCONF指定的模块文件
我的ROOT_URLCONF='mysite.urls'
当加载进入polls.urls文件时,会查找变量urlpatterns 然后变量所有的正则,并调用相应的include()函数,
但请注意:这里的正则没有$符号,但有一个反斜"/",在这里,Django会切掉所匹配的部分url,并把剩余的
部分给include()中的URLconf进一步处理:如
url请求:http://localhost:8000/polls/34/
mysite/urls:
zhang@h:~/workspace/python-web$ cat mysite/mysite/urls.py
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover() urlpatterns = patterns('', url(r'^polls/', include('polls.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
这里会匹配polls/,然后把剩下的部分34给include()所包含的URLconf,即polls.urls处理
polls/urls.py:
zhang@h:~/workspace/python-web/mysite$ cat polls/urls.py
#!/usr/bin/python
#-*- coding:utf-8 -*-
# Filename: urls.py
# Author: xiaobing
# E-mail: xiaobingzhang29@gmail.com
# Date: 2013-09-01
# Description: from django.conf.urls import patterns, url from polls import views urlpatterns = patterns('',
#ex: /polls/
url(r'^$', views.index, name='index'),
#ex: /polls/5/
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
#ex: /polls/5/results/
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'), #ex: /polls/5/vote/
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'), )
这时,34/会被传入polls/urls.py文件中,并查找urlpatterns变量,并逐个匹配正则,其中:
\d+匹配数字,那么34被匹配成功,
r'^(P<poll_id>\d+)'结果为: detail(request=<HttpRequest object>, poll_id='34')
poll_id=34是由正则(?P<poll_id>\d+)捕获的,并把变量值赋值给poll_id,这样,再调用第二个参数
试图views.detail,然后detail返回httpResponse对象的数据给客户端,这样就完成了url的请求和响应
总结一下:
在mysite/mysite.py中会匹配'^polls/',把剩下的部分给include()函数调用的URLconf处理
polls/urls.py匹配'\d+'匹配34,并有(?P<poll_id>\d+).将其捕获并赋值到poll_id中,并调用
url函数的第二个参数试图polls/views.py中的detial()函数来处理,最终返回到客户端
注意:在URLconf中的url()函数的第一个参数正则表达式不搜索GET和POST参数,或者协议,域名,端口号,例如:
http://localhost:8000/myapp,这个URLconf只匹配myapp/,然而,http://localhost:8000/myapp:?page=3也只匹配
myapp
Django的url解析的更多相关文章
- Django之逆向解析url
Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用: 1.有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图, 获取相应的数据 ...
- Django学习笔记之Django的url反向解析
0x00 URL反向解析和三种不同的反向解析方式 Django中提供了关于URL的映射的解决方案,可以做两个方向的使用: 1.普通解析过程:由客户端的浏览器发起一个url请求,Django根据URL解 ...
- Django 的逆向解析url(转)
Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用: 1.有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图, 获取相应的数据 ...
- Django 的逆向解析url--reverse(转)
https://www.cnblogs.com/zhenfei/p/6368955.html Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用: 1.有客户端的浏览器发起一个 ...
- Python - Django - 命名 URL 和反向解析 URL
命名 URL: test.html: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- Django之url反向解析
在urls.py文件中,在进行url映射时,为请求的url命个名,以便在模板页面或者views.py视图中可以进行反向解析,同时在修改了url映射的请求路径,名称不变的情况下,不再修改模板页面或者视图 ...
- Django的URL路由系统
一. URL配置 URL配置就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图之间的映射表.你就是以这种方式告诉Django,对于哪个URL调用的这段代码. 基本格式 from ...
- Django之URL路由系统
一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...
- Django之url路由
Django之url路由 url路由介绍 url路由是关联url及其视图函数关系的过程. 作用就是使views里面处理数据的函数与请求的url建立映射关系 url路由配置 Django的url路由配置 ...
随机推荐
- dede修改移动文档的js
dede后台弹框修改: 想做个类似文章列表的移动功能,弹框,然后修改成功到表 先在list.js里复制一份moveArc的方法,到archives_do.php里复制一份moveArchives的方法 ...
- C语言之辗转相除法
最大公约数和最小公倍数 从键盘输入两个正整数,求出其最大公约数和最小公倍数.代码如下: #include<stdio.h>int ss(int);int main(void){ int a ...
- jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL
这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...
- linux进程解析--进程切换
为了控制进程的执行,linux内核必须有能力挂起正在cpu上运行的进程,换入想要切换的进程,也就是恢复以前某个挂起的进程,这就是linux的进程切换. 1进程切换的时机 一般来说,进程切换都是发生在 ...
- ubuntu ???????????? no permissions 问题解决
近期的一个项目须要用到linux开发android程序! 发现ubuntu有小米开发连接不上! 搞了一个下午才搞成功! 看看吧! 小米手机利用USB连接到Ubuntu 10.04系统.执行以下的命令 ...
- POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9658 Accepted: ...
- Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性
CSDN 对格式支持比較弱.能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. Performance Tuning Guide ...
- cocos2d-x 之Scene和Layer
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)
Replica Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...
- if语句之求一元二次方程
思路:1.首先明白什么叫做一元二次方程,当a不等于0的时候,此方程是一元二次方程 2.根据公式derta=b*b-4*a*c来判断根的情况 ①derta>0时,方程有两个不相等的实根 ②dert ...