django(二)视图和URL配置
创建一份视图:
在上一节,使用django-admin.py startproject制作的mysite文件夹中,创建一个叫做views.py的空文件。这个Python模块健柏寒这一章的视图。
views.py文件的内容:
from django.http import HttpResponse def hello(request):
return HttpResponse("hell world")
我们定义一个叫做hello的视图函数:
每个视图函数至少要有一个参数,通常被叫做request。这是一个触发这个视图、包含当前web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,我们虽然不用request做任何事,然而它仍必须是这个视图的第一个参数。
这个函数仅仅返回一个HttpResponse对象,这个对象包含了文本"Hello world"。
一个视图就是python的一个函数。这个函数的第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使python的函数成为一个django可识别的视图,它必须满足这两个条件。(也有例外)
激活视图函数,绑定视图函数和URL(URLconf):
要想在浏览器里看到我们刚才写的内容,就要告诉项目mysite通过一个详细描述的URL来显示的并且激活这个视图。为了绑定视图函数和URL,我们使用URLconf。
URLconf就像是django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。你就是以这种方式告诉django,对于这个URL调用这段代码,对于那个URL调用那段代码。
之前执行django-admin.py startproject时,该脚本会自动为你建一份URLconf(即urls.py)。
打开urls.py文件,看到内容显示:
调用patterns()函数并将返回结果保存到urlpatterns变量。
django期望能从ROOT_URLCONF模块中找到urlpatterns变量。该变量定义了URL以及用于处理这些URL的代码之间的映射关系。如果想在URLconf中加入URL和view,只需增加映射URL模式和view功能的Python tuple即可。这里掩饰如何添加view中hello功能。
from fjango.conf.urls.defaults import *
from mysite.views import hello urlpatterns = [
url(r'^hello/$', hello),
url(r'^time/$, date_time)
]
django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。这意味着我们为/hello/写URL模式不用包含斜杠(/)。
模式是正则表达式详细参见:http://www.cnblogs.com/Guido-admirers/p/6235484.html
如果有人申请访问/hello(尾部没有/)会怎样。用为我们的URL模式要求尾部有一个斜杠(/),那个URL将不匹配。然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重新定向至尾部包含斜杠的相同字眼的URL。(这是受配置文件setting中的APPEND_SLASH项控制的)
如果你喜欢所有的URL都以'/'结尾的人(django开发者的偏爱),那么你只需要在每个URL后添加斜杠,并且设置”APPENDSLASH“为”True“。如果不喜欢URL以斜杠结尾或者根据每个URL来决定,那么需要设置”APPENDSLASH“为”False“,并且根据自己的意愿来添加结尾斜杠在URL模式后。、
启动django开发服务器来测试修改好的URLconf,运行命令行python manage.py runserver,开发服务器会自动监测代码改动并自动从新载入。
了解一下django是怎么处理请求的:
当你通过在浏览器里敲http://127.0.0.1:8000/hello/来访问helloworld消息的时候,django的所有均开始与setting文件。当运行python manage.py runserver,脚本将在与manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个django项目的配置信息,均大写:TEMPLATEDIRS,DATABASENAME等。最重要的设置是ROOT_URLCONF,它将作为URLconf告诉django在这个站点中哪些python的模块将被用到。
django-admin.py startproject创建文件setting.py和urls.py,setting.py包含一个ROOT_URLCONF配置用来指向自动产生的urls.py。打开文件settings.py:可以看到 ROOT_URLCONF = 'mysite.urls'
相对应的文件是mysite/urls.py
当访问URL/hello/时,django根据ROOT+URLCONF的设置装载URLconf。然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配。当找到这个匹配的URLpatterns就调用相关联的view函数,并把HttpRequest对象作为第一个参数。一个视图功能必须返回一个HttpResponse。一旦做完,django将完成剩余的转换python的对象到一个合适的带有HTTP头和body的webResponse,(例如,网页内容)。
总结一下:
- 进来的请求转入/hello/.
- Django通过在ROOT_URLCONF配置来决定根URLconf.
- Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
- 如果找到匹配,将调用相应的视图函数
- 视图函数返回一个HttpResponse
- Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
更多更详细内容见原文:http://www.code123.cc/1375.html
django(二)视图和URL配置的更多相关文章
- Django之视图和URL配置
1.在创建项目时,Django会自动创建URL配置,在urls.py文件中 文件的默认内容如下所示: """mysite URL Configuration The ur ...
- Django:视图和URL配置
一.视图 1.在mysite文件夹下.创建views.py文件(文件名称没有特别的要求): from django.http import HttpResponse def hello(re ...
- Django学习day4——视图和URL配置
创建一个简单的hello world 在day3中我们第一次运行了服务器,里面是一个django的欢迎页面,那是因为我们没有配置URL和视图,django在底层会自动跳转这个页面上 我们在mysite ...
- Django笔记 —— 高级视图和URL配置
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- 视图和URL配置
视图和URL配置 实验简介 上一章里我们介绍了如何创建一个Django项目并启动Django的开发服务器.本章你将学到用Django创建动态网页的基本知识. 同时,也教会大家怎么在本地机器上建立一个独 ...
- django-高级视图和url配置
高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...
- 视图的URL配置,找不到我设置的第一个Page
问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page 原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下 ...
- Python的Django框架中的URL配置与松耦合
Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...
- 【二】Django 视图和url配置
在新建的Django项目下,新建一个views的python文件,编辑如下代码 from django.http import HttpResponse def hello(request): ret ...
随机推荐
- (转载)PHP mb_substr函数在实际编码中的应用方法
(转载)http://developer.51cto.com/art/200912/166080.htm 我们在使用PHP语言进行实际编码中时,通常会遇到许多错误的出现,比如在截取字符串时会出现乱码等 ...
- 您好,想问一下目前哪些营业厅可以办理NFC-SIM卡的更换业务?_百度知道
您好,想问一下目前哪些营业厅可以办理NFC-SIM卡的更换业务?_百度知道 您好,想问一下目前哪些营业厅可以办理NFC-SIM卡的更换业务? 2013-06-14 10:39 maxre ...
- Java 8 中新的 Date 和 Time 类入门详解
这篇文章主要是java8中新的Date和Time API的实战.新的Date和Time类是java开发者社区千呼万唤始出来的.Java8 之前存在的Date类一直都受人诟病,很多人都会选择使用第三方的 ...
- Retina 屏移动设备 1px解决方案
做移动端H5页面开发时都会遇到这样的问题,用 CSS 定义 1px 的实线边框,在 window.devicePixelRatio=2 的屏幕上会显示成 2px,在 window.devicePix ...
- motan源码分析四:客户端调用服务
在第一章中,我们分析了服务的发布与注册,本章中将简单的分析一下客户端调用服务的代码及流程,本文将以spring加载的方式进行分析. 1.在DemoRpcClient类的main()方法中加载类: Ap ...
- 对openflow 1.0协议的扩展
通过这几天对openvswitch代码的分析,以及项目的须要,须要对openflow 1.0进行一定的扩展,发现网上没有这方面的教程,尽管在搞懂ovs代码架构,floodlight controlle ...
- Android Spinner列表选择框
Spinner Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源. 1.直接设置数组源 在res/values/strings.xml中设置数组源 ...
- SQL语句查询结果额外加入一列序号自己主动添加
sqlserver 能够用row_number函数实现 例如以下: SELECT *,row_number() OVER(ORDER BY score(列名) DESC) AS rank FROM s ...
- Robotium--通过Id寻找控件
在自动化测试中,UI上经常有一些控件是没有名称的,那么此时,就可以通过id来找到这些控件. 案例:对两个EditText进行测试 package com.tangbc.tedit.test; impo ...
- laravel实现数据库读写分离配置或者多读写分离配置
config\database.php里 读写分离:'mysql' => array( 'read' => array( 'host' => '192.168.1.1', ), 'w ...