Django学习日记06_视图_URLconf、View
URLconf
Django通过URLconf来响应网页请求,在项目设置settings.py中,设定了ROOT_URLCONF值来指定默认的URLconf(即mysite.urls),当HTTPRequst中没有urlconf属性的话,便会访问该默认值。
在urlconf中,设定了一组pattern:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
可以往该列表中添加需要的url函数,每个url函数包含两个参数:匹配模式、实现的view对象。

url函数有两种调用方式:
1. 对于view是一个视图对象时,直接返回RegexURLPattern(reggae, view, kwargs, name)对象,此时,将会使用mysite.settings中的ROOT_URLCONF值指定的默认URLconf,默认为mysite.urls;
2. 对于view包含urlconf以及app name时,在使用时如一开始给出的例子一样,使用include一个URLconf的方式,如将/my_app/目录下的匹配规则放到my_app_patterns的URLconf中,然后在默认URLconf中添加:url(r’^my_app/$’,include(my_app_patterns)),对/my_app/下的内容进行匹配操作。这样的工作会让整个URL结构变得清晰。include同时可以将app_name、namespace包含在内形成一个三元素元组,通过命名空间来限定多个同名的视图对象。
并且可以看到Django将会在未来版本中移除view使用字符串,同时prefix参数也将不再有用。
kwargs参数指定view中需要调用的一些字典参数;
设置name参数,可以在模板中使用url 来插入一个超链接,但是你必须保证名字的唯一性,否则模板中可能会插入另一个同名连接;
namespaces,早期的Django版本在模板渲染时,Context、RequestContext对象必须设置current_app属性,而在复杂部署的应用中,设置current_app也是必要的。如果不同的应用使用同一套URLconf,那么通过include指定命名空间则可以区分这些同名应用:
from django.conf.urls import include, url
urlpatterns = [
url(r'^author-polls/', include('polls.urls', namespace='author-polls', app_name='polls')),
url(r'^publisher-polls/', include('polls.urls', namespace='publisher-polls', app_name='polls')),
]
app_name指定了应用的名称,例如,在polls.urls中,有一个url的name为list,则其全名应该为polls:list,而完整路径为author-polls:polls:list,namespace指定了从哪个命名空间而来,app_name指定了以什么名字作为当前命名空间目录的名字。
关于url的命名空间,详细参考djangodocument说明
URLpattern
url函数的第一个参数为一个匹配模式,和正则表达式基本相同,同时有一些自身的特点。
1. 使用真实字符串来匹配,会省去很多转义的麻烦: r' '
2. 开头的斜杠省略不写,如匹配 /my_app/ : r'^my_app/$'
3. 匹配时按照顺序匹配,匹配成功则直接调用
4. Django偏好使用斜杠结尾,如果不以斜杠结尾导致不能匹配,将会被重定向至尾部以斜杠结尾的相同字眼的URL,可以通过配置文件中的APPEND_SLASH控制
5. 保留大多数正则表达式规则
6. 可以对匹配进行捕获,并且捕获的内容作为参数传入到view对象中,如果简单捕获,则传入参数时按照捕获的顺序,按照位置传入
7. 通过?P<name> 可以对捕获的内容进行命名,命名后的捕获内容将会以字典参数的方式传入到view对象中,同在url调用时输入kwargs参数
8. 应该使用?: 来取消捕获一些需要分组的、但是不必要传入到view对象中的内容,以免保持业务逻辑的简明
View
视图通过接受以及响应请求来实现网站的业务逻辑,django中的视图函数,即 view.py,即是一个接受网页请求并且做出网页响应的函数。
view可以在任何地方实现,只要保证在PYTHONPATH中,能够被适当的命名空间寻找到,并且被URLconf与URL关联起来:
from django.http import HttpResponse
import datetime
def current_datetime(request,*argv,**kw):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
current_datetime就是一个视图函数,该函数对request请求响应html页面。每一个视图函数都必须返回一个HttpResponse类或者其子类的实例。
而在实际操作中,应该使用模板而避免将html直接硬编码到视图中。
每个视图函数都是以一个HttpRequest对象作为第一个参数,后面可以跟一些基于位置的参数,匹配URL时将会把捕获到的内容按顺序传入,或者是字典参数,匹配URL时通过命名的捕获会传入到其中。
需要注意的是,捕获到的内容都是字符串,就算是以(\d)捕获的内容只会捕获到数字,但是捕获到的还是字符串,所以需要用合适的工厂函数加以转换类型。
Django学习日记06_视图_URLconf、View的更多相关文章
- Django笔记&教程 2-3 视图(view)函数介绍
Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...
- Django学习笔记之视图高级-HTTP请求与响应
Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...
- [转载][QT][SQL]sql学习记录5_sqlite视图(View)
转载自:http://www.runoob.com/sqlite/sqlite-view.html SQLite 视图(View) 视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLi ...
- django学习-2.urls.py和view.py的相关知识点
1.URL函数简单解析 1.1.url() 函数可以接收四个参数,分别是两个必选参数:regex.view,和两个可选参数:kwargs.name. def url(regex, view, kwar ...
- android学习日记06--View视图
一.android 界面开发 1.三个重要的类:View视图.Canvas画布.Paint画笔2.android 界面开发常用三种视图 View --只能在主线程中更新,没有缓存 ...
- Django初印象之视图(view)
一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...
- Django学习笔记之视图高级-类视图
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...
- Django学习---路由url,视图,模板,orm操作
Django请求周期 url -> 路由系统 ->函数或者类 -> 返回字符串 或者 模板语言 Form表单提交: 点击提交 -> 进入url系统 -> 执行函数 ...
- Django学习之 - 基础视图函数
视图:Views 获取用户请求的方法: 1: request.GET 2: request.POST 3: request.FILES # checkbox 等多选文件 4:request.POST. ...
随机推荐
- php 可逆加密方法
可以逆转的加密类,没有密钥很难破解 [PHP]代码 <? class encryptCalss { var $key=12; function encode($txt){ for($i=0;$i ...
- CenterOS 7 基础命令学习
CentOS 7 命令 网络配置 nmcli(NetworkManageCommandLineInterface)查看网卡 nmtui(NetworkManageTextUserInterface)网 ...
- Chrome浏览器读写系统剪切板
IE浏览器支持直接读写剪切板内容: window.clipboardData.clearData(); window.clipboardData.setData('Text', 'abcd'); 但是 ...
- linux下yum安装redis以及使用
1.yum install redis --查看是否有redis yum 源 2.yum install epel-release --下载fedora的epel仓库 3. yum ...
- 关于SPI通信原理与程序实现
第一次接触SPI是因为当时用到NRF24L01,需要用SPI进行通信.因为2401上面写着MOSI.MISO.SS.RST,当时以为只要用到SPI就肯定有这几个引脚,以至于限制了自己的思维.只认识MI ...
- Spring3.0官网文档学习笔记(二)
1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包) spring-*.jar *号代表 ...
- Android TCP/IP 扫盲教程
TCP/IP 是因特网的通信协议. 通信协议是对计算机必须遵守的规则的描写叙述.仅仅有遵守这些规则.计算机之间才干进行通信. 浏览器和server都在使用 TCP/IP 因特网浏览器和因特网serve ...
- F04 我的投资策略
我的投资理念:价值投资和右侧趋势投资.我的目标年化收益率: 15-25%我的投资时间:3-5年我的投资品种:股票 + EFT基金 买卖时间点的纪律(买入,卖出的时间原则)股票MA20为界限,高于则持有 ...
- atom添加eslint插件
在atom编辑器里添加插件,操作步骤如下:以atom-ide-vue插件为例 //切换到插件目录cd /Users/name/.atom/packages //将需要下载插件的源代码拉下来git cl ...
- .Net 关于 InfoPath 的基本使用
最近几天接触微软的 InfoPath 表单工具,结合VS 使用,遇到的一些问题与解决方法,记录一下,百度上的内容很少,或许我根本不知道咋搜,所有也留一个网页帮助自己使用当然使用的时候碰到了好几个坑: ...