Django 1.8_视图和URL配置
Posted phappiness
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 1.8_视图和URL配置相关的知识,希望对你有一定的参考价值。
前情提要
学习了如何创建django项目,运行开发django服务器,并了解了mvc模式。
内容
VIEW
URL
正则表达式
错误解析与寻求帮助
- hello world.html
- dynamic_date.html
- dynamic_date_offset.html
Django处理请求的过程
Helloword
创建一网页,打开即显示helloworld。
其中网页内容由视图生成,并配置URL。
在mysite/mysites下创建views.py并编辑
1 from django.http import HttpResponse 2 3 def hello(request): 4 return HttpResponse(‘HELLO, WORLD!‘)
1 from django.conf.urls import include, url 2 # include,导入另一个url的配置模块 3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上 4 from django.contrib import admin 5 from mysite import views 6 7 urlpatterns = [ 8 url(r‘^admin/‘, include(admin.site.urls)), 9 url(r‘^hello/$‘, views.hello), 10 ]
dynamic_date
1 from django.http import HttpResponse 2 import datetime 3 4 def hello(request): 5 return HttpResponse(‘HELLO, WORLD!‘) 6 7 # new add 8 def current_datetime(request): 9 now = datetime.datetime.now() 10 html = "It‘s now %s." % now 11 return HttpResponse(html)
1 from django.conf.urls import include, url 2 # include,导入另一个url的配置模块 3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上 4 from django.contrib import admin 5 from mysite import views 6 7 urlpatterns = [ 8 url(r‘^admin/‘, include(admin.site.urls)), 9 url(r‘^hello/$‘, views.hello), 10 # new add 11 url(r‘^time/$‘, views.current_datetime) 12 ]
dynamic_date_offset
1 from django.conf.urls import include, url 2 # include,导入另一个url的配置模块 3 # url,使用正则表达式模式匹配浏览器中的url,并映射到django项目的某个模块上 4 from django.contrib import admin 5 from mysite import views 6 7 urlpatterns = [ 8 url(r‘^admin/‘, include(admin.site.urls)), 9 url(r‘^hello/$‘, views.hello), 10 url(r‘^time/$‘, views.current_datetime), 11 # new add 12 url(r‘^time/plus/(\d{1,2})/$‘, views.hours_ahead) # 限制使用一个或者两个数字,最大偏移为99 13 ]
1 from django.http import HttpResponse, Http404 2 import datetime 3 4 def hello(request): 5 return HttpResponse(‘HELLO, WORLD!‘) 6 7 def current_datetime(request): 8 now = datetime.datetime.now() 9 html = "It‘s now %s." % now 10 return HttpResponse(html) 11 12 # new add 13 def hours_ahead(request, offset): 14 try: 15 offset = int(offset) # 捕捉url中的偏移量数字,为unicode编码,转化成数字,后续用 16 except ValueError: 17 raise Http404() 18 dt = datetime.datetime.now() + datetime.timedelta(hours=offset) 19 html = "In %s hours, it will be %s" %(offset, dt) 20 return HttpResponse(html)
Note: URL 和视图之间是松耦合的,即可以通过多个url定位到同一个视图,改变一个对另一个影响很小。
正则表达式
. 单个字符
\d 单个数字
[A-Z] 大写字母中的某一个
[a-z] 小写字母中的某一个
[A-Za-z] 不区分大小写的某一个字母
+ 一个或者多个前述表达式 \d+
[^/]+ 一个或多个字符,直到遇到斜线
? 零个或者一个前述表达式 \d?
* 零个或者多个前述表达式
{1,3} 介于一个到三个之间前述表达式
Django处理请求的过程
点击url,后显示页面,django做了什么
- 请求/hello/
- Django查看ROOT_URLCONF设置,找到根URL配置
- Django比较URL配置中的各个URL模式,找到与/hello/匹配的那个
- 如果找到匹配的模式,调用对应的视图函数
- 视图函数返回一个HttpResponse对象
- Django把HttpResponse对象转化正确的HTTP响应,得到网页
错误解析和寻求帮助
页面顶部是异常关键信息: 异常类型和消息,抛出异常的文件以及所在的行号
Trackback标题旁边有“Switch to copy-and-paste view”文本。点击后,就会切换到另一个版本,以便分享给别人,寻求帮助。
以上是关于Django 1.8_视图和URL配置的主要内容,如果未能解决你的问题,请参考以下文章