在Python的Django框架中使用通用视图的方法

 更新时间:2015年07月21日 11:56:02   投稿:goldensun  
这篇文章主要介绍了在Python的Django框架中使用通用视图的方法,同时提到了相关的安全问题,需要的朋友可以参考下

使用通用视图的方法是在URLconf文件中创建配置字典,然后把这些字典作为URLconf元组的第三个成员。

例如,下面是一个呈现静态“关于”页面的URLconf:

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
  (r'^about/$', direct_to_template, {
    'template': 'about.html'
  })
)

一眼看上去似乎有点不可思议,不需要编写代码的视图! 它和第八章中的例子完全一样:direct_to_template视图仅仅是直接从传递过来的额外参数获取信息并用于渲染视图。

因为通用视图都是标准的视图函数,我们可以在我们自己的视图中重用它。 例如,我们扩展 about例子,把映射的URL从 /about//修改到一个静态渲染 about/.html 。 我们首先修改URL配置以指向新的视图函数:

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
**from mysite.books.views import about_pages**

urlpatterns = patterns('',
  (r'^about/$', direct_to_template, {
    'template': 'about.html'
  }),
  **(r'^about/(\w+)/$', about_pages),**
)

接下来,我们编写 about_pages 视图的代码:

from django.http import Http404
from django.template import TemplateDoesNotExist
from django.views.generic.simple import direct_to_template

def about_pages(request, page):
  try:
    return direct_to_template(request, template="about/%s.html" % page)
  except TemplateDoesNotExist:
    raise Http404()

在这里我们象使用其他函数一样使用 direct_to_template 。 因为它返回一个HttpResponse对象,我们只需要简单的返回它就好了。 这里唯一有点棘手的事情是要处理找不到模板的情况。 我们不希望一个不存在的模板导致一个服务端错误,所以我们捕获TemplateDoesNotExist异常并且返回404错误来作为替代。

这里有没有安全性问题?

眼尖的读者可能已经注意到一个可能的安全漏洞: 我们直接使用从客户端浏览器得到的数据构造模板名称(template="about/%s.html" % page )。乍看起来,这像是一个经典的 目录跨越(directory traversal) 攻击(详情请看第20章)。 事实真是这样吗?

完全不是。 是的,一个恶意的 page 值可以导致目录跨越,但是尽管 page 是 从请求的URL中获取的,但并不是所有的值都会被接受。 这就是URL配置的关键所在: 我们使用正则表达式 \w+ 来从URL里匹配 page ,而 \w 只接受字符和数字。 因此,任何恶意的字符 (例如在这里是点 . 和正斜线 / )将在URL解析时被拒绝,根本不会传递给视图函数。

相关文章

  • PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能

    PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能

    这篇文章主要给大家介绍了关于PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能的相关资料,我们在使用pycharm的时候,pycharm中的虚拟环境依赖包需要导出成一个文件,需要的朋友可以参考下
    2023-11-11
  • Flask框架之数据交互的实现

    Flask框架之数据交互的实现

    本文主要介绍了Flask框架之数据交互的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 对json字符串与python字符串的不同之处详解

    对json字符串与python字符串的不同之处详解

    今天小编就为大家分享一篇对json字符串与python字符串的不同之处详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python实现多人聊天室

    python实现多人聊天室

    这篇文章主要为大家详细介绍了python实现多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python3 sys.argv[ ]用法详解

    Python3 sys.argv[ ]用法详解

    这篇文章主要介绍了Python3 sys.argv[ ]用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Python数据可视化常用4大绘图库原理详解

    Python数据可视化常用4大绘图库原理详解

    这篇文章主要介绍了Python数据可视化常用4大绘图库原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python把ipynb文件转换成pdf文件过程详解

    python把ipynb文件转换成pdf文件过程详解

    这篇文章主要介绍了用python把ipynb文件转换成pdf文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python实现自动化网页操作步骤

    Python实现自动化网页操作步骤

    这篇文章主要介绍Python如何实现自动化网页操作,文中有详细的流程步骤和代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • Python爬虫获取op.gg英雄联盟英雄对位胜率的源码

    Python爬虫获取op.gg英雄联盟英雄对位胜率的源码

    这篇文章主要介绍了Python爬虫获取op.gg英雄联盟英雄对位胜率,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Tensorflow实现AlexNet卷积神经网络及运算时间评测

    Tensorflow实现AlexNet卷积神经网络及运算时间评测

    这篇文章主要为大家详细介绍了Tensorflow实现AlexNet卷积神经网络及运算时间评测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论