django框架-视图和URL配置

2.1 第一个页面django驱动的页面:hello world

2.1.1 第一个视图
from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello World")
2.1.2 第一个URL配置
from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^hello/$', hello),
]

正则表达式字符串前面的 ‘r’ 字符。它的目的是告诉 Python,那是“原始字符串”,不要解释里面的反斜线。从端口加斜杠后面开始算。
访问http://192.168.139.128:8000/hello/,返回结果hello world

2.1.3 正则表达式
符号匹配的内容
.(句点)单个字符
\d单个数字
[A-Z]A-Z之间的单个字母
[a-z]a-z之间的单个字母
[A-Za-z]a-z(不区分大小写)之间的单个字母
+一个或多个前述表达式
[^/]+一个或多个字符,知道遇到斜线
?零个或一个前述表达式
*零个或多个前述表达式
{1,3}1到3个之间前述表达式
2.1.4 关于 404 错误的简要说明
2.1.5 关于网站根地址的简要说明
from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello, my_homepage_view

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$',hello),
    url(r'^$',my_homepage_view), #设置网站根目录
]

测试结果
这里写图片描述

2.1.6 Django 处理请求的过程

过程概述:
运行 python manage.py runserver 命令时,manage.py 脚本在内层 mysite 目录中寻找为 settings.py 的文件,其中最重要的设置是 ROOT_URLCONF(ROOT_URLCONF = ‘mysite.urls’)。它告诉 Django,网站的 URL 配置在哪个 Python 块中,这个模块对应的文件是 mysite/urls.py。收到针对某个 URL(假如是 /hello/)的请求时,Django 加载ROOT_URLCONF 设置指定的 URL 配置;然后按顺序检查 URL 配置中的各个 URL 模式,依次与请求的 URL 比较,直到找到匹配的模式为止,找到匹配的模式之后,调用对应的视图函数,并把一个 HttpRequest 对象作为第一个参数传给视图。随后,余下的工作交给 Django 处理:把那个 Python 对象转换成正确的 Web 响应,并且提供合适的 HTTP 首部和主体(即网页的内容)

处理请求过程:
1. 请求 /hello/。
2. Django 查看 ROOT_URLCONF 设置,找到根 URL 配置。
3. Django 比较 URL 配置中的各个 URL 模式,找到与 /hello/ 匹配的那个。
4. 如果找到匹配的模式,调用对应的视图函数。
5. 视图函数返回一个 HttpResponse 对象。
6. Django 把 HttpResponse 对象转换成正确的 HTTP 响应,得到网页

2.2 第二个视图:动态内容

#mysite/views.py
from django.http import HttpResponse
import datetime

def hello(request):
    return HttpResponse("Hello World")
def my_homepage_view(request):
    return HttpResponse("网站根目录")
def current_datetime(request):
    now = datetime.datetime.now()
    html = 'It is now %s.' % now
    return HttpResponse(html)

#mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello, my_homepage_view,current_datetime

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$',hello),
    url(r'^$',my_homepage_view),
    url(r'^time/$',current_datetime),
]

动态内容结果

2.3 URL 配置和松耦合

from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello, my_homepage_view,current_datetime

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$',hello),
    url(r'^$',my_homepage_view),
    url(r'^time/$',current_datetime),
    url(r'^other_time/$',current_datetime),
]

这里写图片描述

2.4 第三个视图:动态 URL

#我们使用圆括号从匹配的文本中捕获数据,传给视图函数
from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello, current_datetime, hours_ahead
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', hello),
    url(r'^time/$', current_datetime),
    url(r'^time/plus/(\d{1,2})/$', hours_ahead),
]

#views.py
def hours_ahead(request,offset):
    try:
        offset = int(offset)
    except ValueError:
        raise Http404()
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "In %s hours , it will be %s ." % (offset,dt)
    return HttpResponse(html)

#hours_ahead 视图函数有两个参数:request 和 offset。
#• request 是一个 HttpRequest 对象,这与 hello 和 current_datetime 两个视图一样。我要再次强调,每个视图的第一个参数都是 HttpRequest 对象。
#• offset 是 URL 模式中那对圆括号捕获的字符串。如果请求的 URL 是 /time/plus/3/,那么偏移量是字符串 '3';如果请求的 URL 是 /time/plus/21/,那么偏移量是字符串 '21'。注意,捕获的值始终是Unicode 对象,而不是整数,即便捕获的字符串中只有数字(如 '21')也不是。

2.5 Django 精美的错误页面

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值