二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器
Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器
这一节主讲url控制器

一、urls.py模块
这个模块是配置路由映射的模块,当用户访问一个url地址时,通过这个路由映射模块,映射给对应的逻辑处理函数

urlpatterns等于的一个列表,列表里的一个元素就是一条路由映射
urlpatterns路由映射配置方式
参数说明:
一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数

urlpatterns = [
url(正则表达式, 映射函数,参数[可选],别名[可选]),
]
urlpatterns = [
url(r'^admin/', admin.site.urls,{'a':'123'},'ADMIN'),
]

如:

"""Xiangmu URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'^admin/', admin.site.urls), #系统生成的映射
#注意里面的任意一条映射匹配成功,后面的则不在匹配
url(r'^articles/2003/$', views.special_case_2003), #表示articles/2003/这个路径映射views模块的special_case_2003函数
# url(r'^articles/([0-9]{4})/$', views.year_archive), #表示2003可以是0-9的任意4个数字
# url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #表示匹配二级目录
# url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), #表示匹配三级目录
]

二、views.py模块,路由映射的函数模块,逻辑处理路由映射的需求

注意:自定义映射函数时,有两个重点
HttpResponse(字符串)方法向用户返回字符串
1,定义的函数必须,定义一个形式参数,这个形式参数接收的url请求信息对象,可以通过这个形式参数的各种方法获取到各种请求信息
2,向用户返回信息,必须在函数结尾return,如果是要给用户返回一串字符串,那就必须返回HttpResponse方法,参数是要返回的字符串,需要先导入这个方法

from django.shortcuts import render,HttpResponse # Create your views here. def special_case_2003(request):
print(request.method) #获取用户请求的路径
return HttpResponse('你好')

最后测试一下

浏览器输入:http://127.0.0.1:8000/articles/2003/

逻辑处理时获取用户访问路径
逻辑处理自定义函数的第二个参数,就是接收用户请求路径的,所以需要自定义形式参数来接收

from django.shortcuts import render,HttpResponse # Create your views here. def special_case_2003(request,name):
print(request.method) #获取用户请求的路径
print(name) #打印路径
return HttpResponse(name) #将路径返回到页面

注意:要获取路径时,需要在路由映射哪里用正则的分组()号,将要获取的路径分组,也就是括起来,如果路由映射里有多个分组,逻辑函数就需要多个形式参数接收

"""Xiangmu URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'^admin/', admin.site.urls), #系统生成的映射 url(r'^(articles/2003)/$', views.special_case_2003), #表示articles/2003/这个路径映射views模块的special_case_2003函数
# url(r'^articles/([0-9]{4})/$', views.year_archive), #表示2003可以是0-9的任意4个数字
# url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #表示匹配二级目录
# url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), #表示匹配三级目录
]



上面我们讲到的是自定义形式参数接收访问路径,下面我们讲设置固定形式参数
逻辑处理函数,接收用户访问路径时设置固定形式参数,
需要在路由映射里设置,逻辑函数接收的参数名称?P<year>
路由映射

"""Xiangmu URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'^admin/', admin.site.urls), #系统生成的映射 url(r'^(?P<year>articles/2003)/$', views.special_case_2003), #表示articles/2003/这个路径映射views模块的special_case_2003函数
# url(r'^articles/([0-9]{4})/$', views.year_archive), #表示2003可以是0-9的任意4个数字
# url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #表示匹配二级目录
# url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), #表示匹配三级目录
]

逻辑处理

from django.shortcuts import render,HttpResponse # Create your views here. def special_case_2003(request,year):
print(year)
return render(request,'index.html')

逻辑处理返回html文件
将HTML文件放到templates文件夹,逻辑处理的时候会自动到这个文件夹搜索相应文件

需要先导入render方法
render(用户请求对象,html文件路径名称)方法,向用户返回html文件内容

from django.shortcuts import render,HttpResponse # Create your views here. def special_case_2003(request,name):
return render(request,'index.html')

整个流程
路由映射

"""Xiangmu URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'^admin/', admin.site.urls), #系统生成的映射 url(r'^(articles/2003)/$', views.special_case_2003), #表示articles/2003/这个路径映射views模块的special_case_2003函数
# url(r'^articles/([0-9]{4})/$', views.year_archive), #表示2003可以是0-9的任意4个数字
# url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #表示匹配二级目录
# url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), #表示匹配三级目录
]

逻辑处理

from django.shortcuts import render,HttpResponse # Create your views here. def special_case_2003(request,name):
return render(request,'index.html')

整个流程图

上面讲的,都是通过全局里的urls.py模块路由映射的,如果网站很大有很多个app应用,那么就需要路由分发,每一个app应用负责一个业务
路由分发
过个全局里的urls.py模块,配置路由分发,将制定的路径分发到指定的app应用里的urls.py模块里路由映射
全局urls.py模块路由分发
首先要在全局urls.py模块引入
from django.conf.urls import include, url
include('app1.urls')函数,设置要分发的路由映射路径名称
全局urls.py模块路由分发
from django.conf.urls import include, url
urlpatterns = [
url(r'^bug', include('app1.urls')), #将访问路径以bug开头的路径分发到app1下的urls.py模块里进行路由映射 ]
app1.py路由映射

from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'articles/', views.special), #表示接收全局的路由分发,做路由映射,映射到views下的special函数处理
]

views.py逻辑处理

from django.shortcuts import render,HttpResponse # Create your views here. def special(request):
return render(request,'index.html') #向用户显示一个html页面


路由映射第三个参数,额外传参,字典方式,逻辑处理函数以参数方式接收字典键
路由映射

from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'articles/', views.special,{'anme':1234}) #路由映射第三个参数,额外传参,字典方式,逻辑处理函数以参数方式接收字典键
]

逻辑处理

from django.shortcuts import render,HttpResponse # Create your views here. def special(request,anme):
print(anme) #接收路由映射的额外传参字典的键
return render(request,'index.html') #向用户显示一个html页面

注意:如果额外参数,如果写在全局的路由分发里,那么这个路由分发下的所有路由映射函数都可以获取到
路由映射第四个参数,给路由映射的路径取一个别名,这个别名代指的就是路由映射路径,

from django.conf.urls import url
from django.contrib import admin
from app1 import views urlpatterns = [
url(r'articles/', views.special,{'anme':1234},name='luj') #路由映射第三个参数,额外传参,字典方式,逻辑处理函数以参数方式接收字典键
]

最终url控制器流程图

二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器的更多相关文章
- 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器
Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...
- 【Django必备01】——什么是Django框架?有什么优势?模块组成介绍。
01.什么是Django框架? Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式.使用这种架构,程序员可以方便.快捷地创建高品质.易维护.数据库驱动的应用程序. ...
- Django学习(二) Django框架简单搭建
为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...
- 十二 Django框架,自定义分页
自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- Django 修改视图文件(views.py)并加载Django模块 + 利用render_to_response()简化加载模块 +locals()
修改视图代码,让它使用 Django 模板加载功能而不是对模板路径硬编码.返回 current_datetime 视图,进行如下修改: from django.template.loader impo ...
- 初学django框架 (urls,include子路由,render模板渲染)(一)
一.urls url的使用为了告诉django哪个url调用那一段代码 如上左图所示,后面的test,test1如下图所示,为视图函数,通过前面的路径,调用后面函数的代码: 只有输入正确的url才会在 ...
- Django框架详解之views
一个简单的视图 一个视图函数,是一个简单的python函数,它接受web请求并且返回web响应.无论视图本身包含什么逻辑,都要返回响应.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为 ...
- Django 框架之视图函数(Views)
http请求中产生的两个核心对象: http请求: HttpRequest对象 http响应: HttpResponse对象 所在位置: django.http HttpRequest 对象的属性和方 ...
随机推荐
- HDFS源码分析数据块复制选取复制源节点
数据块的复制当然需要一个源数据节点,从其上拷贝数据块至目标数据节点.那么数据块复制是如何选取复制源节点的呢?本文我们将针对这一问题进行研究. 在BlockManager中,chooseSourceDa ...
- php 微信开发之新增上传/获取下载临时素材
php 微信开发之新增上传/获取下载临时素材 代码 <?php define("AppID","");//你的id define("AppSec ...
- apache重定向无效
这个问题让我纠结了蛮久啊,因为之前一直不注意SEO,网站带www和不带www的一级域名都被收录了,而且不知道为什么不带www的一级域名被收录比www还多,这可不是我的初衷!这次吸取教训了,以后再开站不 ...
- JQ中find()与filter()的区别
刚开始学的时候,对于find()和filter()有点理不清楚,下面通过案例相信就可以很快的区分清楚 以下是代码 find弹出的是 filter()弹出的是 下面我们添加div的class是rain ...
- COM组件多接口对象模型
COM组件有两种接口类型,Dual and Custom,如下图所示.本文说的是Custom.所谓多接口COM对象是指此COM对象实现了多于一个的自定义接口,即Custom接口. 接口图如下: 需要注 ...
- XtraBackup全备与增量备份
一.XtraBackup安装 下载地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/ 安装步骤: ===== ...
- C语言基础知识【循环】
C 循环1.有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推.编程语言提供了更为复杂执行路径的多种控制结构.循环语句允许我 ...
- Lumen Repository(仓储)
在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离:http://laravelacademy.org/post/3063.html Eloquent: 集合:ht ...
- full stack on the road
Full Stack, I'm coming. 有人说全栈只是个理想情况,但我不这么认为,因为好多思想是想通的, 比如 OO.函数式编程.设计模式... 也有人说搞全栈的人样样普通,可是为嘛我在学习j ...
- ORDER BY today_used ASC' % (MAX_USED_TIMES)
python D:\pymine\clean\spider_map\get_bd_uid_rest_b.py python D:\pymine\clean\spider_map\get_bd_uid_ ...