博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+Django+SAE系列教程9-----Django的视图和URL
阅读量:4578 次
发布时间:2019-06-08

本文共 3889 字,大约阅读时间需要 12 分钟。

    第三、四、五章介绍的就是Django中MVC的视图、模板、模型了。

    首先来看视图(view),在用Django生成的站点目录中,创建一个view.py文件,这个文件開始是空的。然后我们输入下面内容:

from django.http import HttpResponsedef hello(request):    return HttpResponse("Hello world")
    在这个文件里我们定义了一个名为hello的函数,事实上这个就是我们的第一个视图了。事实上一个视图就是Python的一个函数。
    
    接下来我们来创建一个URLconf,URLconf 就像是 Django 所支撑站点的文件夹。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这样的方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 比如,当用户訪问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。

    在我们使用django生成的站点中能够找到一个urls.py的文件,我们打开这个文件,依照文件里提示的样例,增加我们想要增加的路径以及相应的视图。

    整个urls.py的内容是这种:

from django.conf.urls import patterns, include, url# Uncomment the next two lines to enable the admin:# from django.contrib import admin# admin.autodiscover()urlpatterns = patterns('',    # Examples:    # url(r'^$', 'Bidding.views.home', name='home'),    # url(r'^Bidding/', include('Bidding.foo.urls')),    # Uncomment the admin/doc line below to enable admin documentation:    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),    # Uncomment the next line to enable the admin:    # url(r'^admin/', include(admin.site.urls)),    url(r'^hello/$', 'Bidding.views.hello'),)
    简单来说,我们仅仅是告诉 Django,全部指向 URL /hello/ 的请求都应由 hello 这个视图函数来处理。我们使用svn把新加的views.py和改动的urls.py上传sae,这样就能看到你的第一个hello程序了。
    上面所演示的是一个极其简单的样例,以下我们用相同的思路来制作一个动态的内容,我们在views.py文件里再加入一个视图:

import datetimedef current_datetime(request):    now = datetime.datetime.now()    html = "如今时间是 %s." % now    return HttpResponse(html)
    再新添加的这个视图中,我们使用了一个变量now,用来输出如今的时间。然后我们须要改动一下urls.py这个文件:

from django.conf.urls import patterns, include, url# Uncomment the next two lines to enable the admin:# from django.contrib import admin# admin.autodiscover()urlpatterns = patterns('',    # Examples:    # url(r'^$', 'Bidding.views.home', name='home'),    # url(r'^Bidding/', include('Bidding.foo.urls')),    # Uncomment the admin/doc line below to enable admin documentation:    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),    # Uncomment the next line to enable the admin:    # url(r'^admin/', include(admin.site.urls)),    url(r'^hello/$', 'Bidding.views.hello'),    url(r'^time/$', 'Bidding.views.current_datetime'),)
上传代码,再看看结果http://应用的地址/time/,这里我们使用了中文,你看到的中文一定是乱码,这里须要改动两个地方:第一是在setting.py文件把 TIME_ZONE = 'Asia/Beijing' 还有 LANGUAGE_CODE = 'zh-cn',改动成这样;第二是在我们使用中文的那个文件(views.py)的顶部加入这样一行就能够了:

# -*- coding: utf-8 -*-

  在接下来,我们来实现一下动态的url。创建第三个视图来显示当前时间和加上时间偏差量的时间,设计是这种: /time/plus/1/ 显示当前时间+1个小时的页面 /time/plus/2/ 显示当前时间+2个小时的页面 /time/plus/3/ 显示当前时间+3个小时的页面,以此类推。

    在urls.py文件里加入(r'^time/plus/\d{1,2}/$', hours_ahead),其含义一定可以看明确了吧 ,假设你对正则不熟悉,那要先熟悉一下了,这里不多过解释正则式了。

    这里面须要注意的是我们须要把用户输入的url中提取一个数作为參数传递给视图。依据上面的正则知道,我们要提取的就是加的小时,也就是“\d{1,2}”这部分(0~99),然而正则中选取部分也是用()这里,须要我们把“\d{1,2}”用括号括起来(r'^time/plus/(\d{1,2})/$', hours_ahead)

from django.conf.urls import patterns, include, url# Uncomment the next two lines to enable the admin:# from django.contrib import admin# admin.autodiscover()urlpatterns = patterns('',    # Examples:    # url(r'^$', 'Bidding.views.home', name='home'),    # url(r'^Bidding/', include('Bidding.foo.urls')),    # Uncomment the admin/doc line below to enable admin documentation:    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),    # Uncomment the next line to enable the admin:    # url(r'^admin/', include(admin.site.urls)),    url(r'^hello/$', 'Bidding.views.hello'),    url(r'^time/$', 'Bidding.views.current_datetime'),    url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'),)
如今開始写 hours_ahead 视图。

def hours_ahead(request, offset):    try:        offset = int(offset)    except ValueError:        raise Http404()    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)    html = "再过 %s 个小时, 时间将会是 %s." % (offset, dt)    return HttpResponse(html)
上面的代码不难理解,这里就不多说了。至于上面的try和except就是为了隐藏错误信息的,作为程序猿的你一定懂得 。
    说到这里,对于视图和URL了解的基本上差点儿相同了,下一章我们继续了解模板。

转载于:https://www.cnblogs.com/zfyouxi/p/4070573.html

你可能感兴趣的文章
html块级元素和行级元素的区别和使用
查看>>
for循环嵌套
查看>>
寒冬夜行人
查看>>
poj1151 Atlantis
查看>>
HTML页面之间的参数传递
查看>>
java面试题集锦
查看>>
scikit-learn:4.2.3. Text feature extraction
查看>>
Spring Security构建Rest服务-0800-Spring Security图片验证码
查看>>
AE待整理
查看>>
java8中规范的四大函数式接口
查看>>
宝塔apache配置
查看>>
shell脚本中使用nohup执行命令不生效
查看>>
PHP 文件上传七牛云
查看>>
ZT:Unity与C++之间进行socket通信
查看>>
Ural 1517. Freedom of Choice 后缀数组
查看>>
【转载】Maven入门实践
查看>>
1-4-03:奇偶数判断
查看>>
【SQL Server备份恢复】提高SQL Server备份速度
查看>>
命令行简介(附加参考资料)
查看>>
从0开始整合SSM框架-1.mybatis
查看>>