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

这一节主讲url控制器

一、urls.py模块

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

urlpatterns等于的一个列表,列表里的一个元素就是一条路由映射

urlpatterns路由映射配置方式

参数说明:

一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数

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

如:

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

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

注意:自定义映射函数时,有两个重点

HttpResponse(字符串)方法向用户返回字符串

  1,定义的函数必须,定义一个形式参数,这个形式参数接收的url请求信息对象,可以通过这个形式参数的各种方法获取到各种请求信息

  2,向用户返回信息,必须在函数结尾return,如果是要给用户返回一串字符串,那就必须返回HttpResponse方法,参数是要返回的字符串,需要先导入这个方法

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

最后测试一下

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

逻辑处理时获取用户访问路径

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

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

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

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

 上面我们讲到的是自定义形式参数接收访问路径,下面我们讲设置固定形式参数

逻辑处理函数,接收用户访问路径时设置固定形式参数,

需要在路由映射里设置,逻辑函数接收的参数名称?P<year>

路由映射

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

逻辑处理

  1. from django.shortcuts import render,HttpResponse
  2.  
  3. # Create your views here.
  4.  
  5. def special_case_2003(request,year):
  6. print(year)
  7. return render(request,'index.html')

逻辑处理返回html文件

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

需要先导入render方法

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

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

整个流程

路由映射

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

逻辑处理

  1. from django.shortcuts import render,HttpResponse
  2.  
  3. # Create your views here.
  4.  
  5. def special_case_2003(request,name):
  6. 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模块路由分发

  1. from django.conf.urls import include, url
  2. urlpatterns = [
  3. url(r'^bug', include('app1.urls')), #将访问路径以bug开头的路径分发到app1下的urls.py模块里进行路由映射
  4.  
  5. ]

app1.py路由映射

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

views.py逻辑处理

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

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

路由映射

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

逻辑处理

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

注意:如果额外参数,如果写在全局的路由分发里,那么这个路由分发下的所有路由映射函数都可以获取到

路由映射第四个参数,给路由映射的路径取一个别名,这个别名代指的就是路由映射路径,

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

最终url控制器流程图

第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器的更多相关文章

  1. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  2. 第四百零四节,python网站第三方登录,social-auth-app-django模块,

    第四百零四节,python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目 ...

  3. 第三百零三节,Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  4. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  5. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...

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

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  7. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  8. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  9. 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

随机推荐

  1. Oracle免费版和付费版,各版本的说明

    Oracle免费版和付费版的区别:   首先这里给出一个答案,oracle确实是免费的给学习的人员使用.oracle的策略就是你可以随意下载我的产品,包括oracle,weblogic等产品用于学习, ...

  2. 使用SplashScreenManager控件定制程序加载页面

    需要devexpress版本在12.0及以上才支持 https://www.cnblogs.com/wuhuacong/p/6112461.html 在DevExpress程序中使用SplashScr ...

  3. AngularJS 使用 UI Router 实现表单向导

    Today we will be using AngularJS and the great UI Router and the Angular ngAnimate module to create ...

  4. Linux下nagios网络监控与/proc/net/tcp文件详解

    问题描述:nagios自带的check_antp太过简约,除了状态统计输出外,什么参数都不提供.在面对不同应用服务器时,报警就成了很大问题. 问题描述:nagios自带的check_antp太过简约, ...

  5. 分享一个不错的squid 配置文件

    squid配置文件一例,只使用了web cache功能,用来给web加速. http_port 80 defaultsite=IPicp_port 0cache_peer ip parent 85 0 ...

  6. C#扩展方法实现 byte[] 输出为HEX字符串形式

    public static class Util { public static string ToHexString(this byte[] bytes) { string byteStr = st ...

  7. Linux 监控分析

    一.硬件基础 Cpu   逻辑的处理.计算.判断 现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms, 再又是A进程占10ms,B进 ...

  8. 搞清tomcat中的编解码

    http://www.xuebuyuan.com/1287083.html *********************************** 经常会被乱码问题搅得头晕脑胀.事实上,乱码问题涉及的 ...

  9. jsp版ueditor图片在线管理返回绝对路径

    引用:http://zhengyunfei.iteye.com/blog/2149979 如果你有富文本编辑器的功能需要开发,我推荐你用百度的ueditor.本文将与你分享jsp版ueditor开发中 ...

  10. python -- 字符串和编码

    字符串和编码 数字--文本 ascii(bg2312,shift_jis,eur_kr)--unicode--utf-8 ord(""),chr() 1  Python提供了ord ...