第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器
2017-07-09 07:23
1016 查看
Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器
这一节主讲url控制器
一、urls.py模块
这个模块是配置路由映射的模块,当用户访问一个url地址时,通过这个路由映射模块,映射给对应的逻辑处理函数
urlpatterns等于的一个列表,列表里的一个元素就是一条路由映射
urlpatterns路由映射配置方式
参数说明:
一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数
如:
二、views.py模块,路由映射的函数模块,逻辑处理路由映射的需求
注意:自定义映射函数时,有两个重点
[b]HttpResponse(字符串)方法向用户返回字符串[/b]
1,定义的函数必须,定义一个形式参数,这个形式参数接收的url请求信息对象,可以通过这个形式参数的各种方法获取到各种请求信息
2,向用户返回信息,必须在函数结尾return,如果是要给用户返回一串字符串,那就必须返回HttpResponse方法,参数是要返回的字符串,需要先导入这个方法
最后测试一下
浏览器输入:http://127.0.0.1:8000/articles/2003/
逻辑处理时获取用户访问路径
逻辑处理自定义函数的第二个参数,就是接收用户请求路径的,所以需要自定义形式参数来接收
注意:要获取路径时,需要在路由映射哪里用正则的分组()号,将要获取的路径分组,也就是括起来,如果路由映射里有多个分组,逻辑函数就需要多个形式参数接收
上面我们讲到的是自定义形式参数接收访问路径,下面我们讲设置固定形式参数
逻辑处理函数,接收用户访问路径时设置固定形式参数,
需要在路由映射里设置,逻辑函数接收的参数名称?P<year>
路由映射
逻辑处理
逻辑处理返回html文件
将HTML文件放到templates文件夹,逻辑处理的时候会自动到这个文件夹搜索相应文件
需要先导入render方法
render(用户请求对象,html文件路径名称)方法,向用户返回html文件内容
整个流程
路由映射
逻辑处理
[b]整个流程图[/b]
上面讲的,都是通过全局里的urls.py模块路由映射的,如果网站很大有很多个app应用,那么就需要路由分发,每一个app应用负责一个业务
[b]路由分发[/b]
[b]过个全局里的[b]urls.py模块,配置路由分发,将制定的路径分发到指定的app应用里的[b][b][b]urls.py模块里路由映射[/b][/b][/b][/b][/b]
[b][b][b][b][b]全局[b][b][b]urls.py模块路由分发[/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b]首先要在全局[b][b][b][b][b][b][b][b][b]urls.py模块引入[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]from django.conf.urls import include, url[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]include('app1.urls')函数,设置要分发的路由映射路径名称[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b]全局[b][b][b]urls.py模块路由分发[/b][/b][/b][/b][/b][/b][/b][/b][/b]
app1.py路由映射
views.py逻辑处理
路由映射第三个参数,额外传参,字典方式,逻辑处理函数以参数方式接收字典键
路由映射
逻辑处理
注意:如果额外参数,如果写在全局的路由分发里,那么这个路由分发下的所有路由映射函数都可以获取到
[b]路由映射第四个参数,给路由映射的路径取一个别名,这个别名代指的就是路由映射路径,[/b]
最终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模块,路由映射的函数模块,逻辑处理路由映射的需求
注意:自定义映射函数时,有两个重点
[b]HttpResponse(字符串)方法向用户返回字符串[/b]
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')
[b]整个流程图[/b]
上面讲的,都是通过全局里的urls.py模块路由映射的,如果网站很大有很多个app应用,那么就需要路由分发,每一个app应用负责一个业务
[b]路由分发[/b]
[b]过个全局里的[b]urls.py模块,配置路由分发,将制定的路径分发到指定的app应用里的[b][b][b]urls.py模块里路由映射[/b][/b][/b][/b][/b]
[b][b][b][b][b]全局[b][b][b]urls.py模块路由分发[/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b]首先要在全局[b][b][b][b][b][b][b][b][b]urls.py模块引入[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]from django.conf.urls import include, url[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]include('app1.urls')函数,设置要分发的路由映射路径名称[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
[b][b][b][b][b][b]全局[b][b][b]urls.py模块路由分发[/b][/b][/b][/b][/b][/b][/b][/b][/b]
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页面
注意:如果额外参数,如果写在全局的路由分发里,那么这个路由分发下的所有路由映射函数都可以获取到
[b]路由映射第四个参数,给路由映射的路径取一个别名,这个别名代指的就是路由映射路径,[/b]
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控制器流程图
相关文章推荐
- [urls.py设置技巧]Django是如何处理URLconf的?
- 第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置
- Django下配置urls(路由)以及views(视图)
- [py]彻底细究web框架的wsgi+逻辑处理模块
- 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性
- Django框架之views(业务逻辑)简单后台首页展示的业务逻辑详细描述
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- 游戏服务端逻辑模块处理框架
- Django&views.py&urls.py
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
- Django框架中处理URLconf中特定的URL的方法
- 处理URL为模块/控制器/方法的格式
- Django框架中处理URLconf中特定的URL的方法
- Django框架之views(业务逻辑)简单后台设置cookie,session信息业务逻辑详细描述
- Python3之Django Web框架URL匹配、反向解析及部分错误处理
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
- Django~urls.py--->views.py
- SpringMVC框架前端控制器、处理适配器和处理器映射器、视图解析器的配置
- GenericServlet HttpServlet,Blade Web框架处理分发逻辑