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控制器的更多相关文章

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

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

  2. 【Django必备01】——什么是Django框架?有什么优势?模块组成介绍。

    01.什么是Django框架? Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式.使用这种架构,程序员可以方便.快捷地创建高品质.易维护.数据库驱动的应用程序. ...

  3. Django学习(二) Django框架简单搭建

    为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...

  4. 十二 Django框架,自定义分页

    自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...

  5. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器

    一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...

  6. Django 修改视图文件(views.py)并加载Django模块 + 利用render_to_response()简化加载模块 +locals()

    修改视图代码,让它使用 Django 模板加载功能而不是对模板路径硬编码.返回 current_datetime 视图,进行如下修改: from django.template.loader impo ...

  7. 初学django框架 (urls,include子路由,render模板渲染)(一)

    一.urls url的使用为了告诉django哪个url调用那一段代码 如上左图所示,后面的test,test1如下图所示,为视图函数,通过前面的路径,调用后面函数的代码: 只有输入正确的url才会在 ...

  8. Django框架详解之views

    一个简单的视图 一个视图函数,是一个简单的python函数,它接受web请求并且返回web响应.无论视图本身包含什么逻辑,都要返回响应.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为 ...

  9. Django 框架之视图函数(Views)

    http请求中产生的两个核心对象: http请求: HttpRequest对象 http响应: HttpResponse对象 所在位置: django.http HttpRequest 对象的属性和方 ...

随机推荐

  1. DJI SDK iOS 开发之中的一个:前言

    写这个开发教程之前,还是先说点什么. 首先要声明的是我并非DJI的员工.仅仅是DJI 飞行器的爱好者. 在DJI的phantom出来之后.我就一直期待着能够推出SDK.之前最早是Parrot的AR D ...

  2. run ceph in docker

    申明:基本安装是依照http://dockone.io/article/436来进行的,但原文中ceph集群的搭建不够完整.我这里会做一些补充及说明. 1.   下载mon和osd镜像 [root@u ...

  3. CentOS 6.4 yum安装LAMP环境

    一.制作连外网的yum源文件 1.  centOS安装完成时是默认存在的,不需要做任何操作,可以直接使用yum 命令进行操作, 默认是在 /etc/yum.repos.d/目录下的 2. 如果你因为制 ...

  4. 1、Codevs 必做:2833、1002、1003、2627、2599

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

  5. 4 Values whose Sum is 0(二分)

    4 Values whose Sum is 0 Time Limit: 15000MS   Memory Limit: 228000K Total Submissions: 21370   Accep ...

  6. Entity Framework 4.1:复杂类型

    这篇文章将讨论复杂类型. 默认情况下,EF4.1 将类映射到表,这是约定,但是有时候,我们需要模型比表的粒度更细一些. 地址是一个典型的例子,看一下下面的客户类. )] publicstring St ...

  7. 九度OJ 1208:10进制 VS 2进制 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2040 解决:612 题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. ...

  8. OC常用函数及变量

    1.OC常用的的函数及变量 (1)算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = rand()P; ...

  9. 20179209《Linux内核原理与分析》第十二周作

    缓冲区溢出漏洞实验 缓冲区溢出简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器 ...

  10. centos7 使用postgres

    1: http://www.cnblogs.com/think8848/p/5877076.html 2:http://blog.csdn.net/xuaa/article/details/52262 ...