利用 Apache 服务器搭建 Python 网站 (三)
来源:互联网 发布:无线鼠标推荐知乎 编辑:程序博客网 时间:2024/06/07 05:30
关系数据库
仗着自己对数据库比较熟悉,在开始的时候我比较随意的设计了数据表,但是当发现自己使用 Django 提供的 model 不能很方便的访问数据后,我就想,是不是哪里有问题了?果然,认真阅读了官方的文档,然后根据例子略微改动了数据结构的设计,顿时觉得豁然开朗,只要将数据结构设计合理了,通过 model 访问数据就方便多了。也许你会说写 sql 也很容易啊,确实容易,但是要根据各种情况来 build 一个合适的 sql 语句有时候也是很讨厌的事情,在明显有更好用的方式的情况下,当然要选更好用的方式。Django 中通过 model 访问数据库的时候,只有真正需要的时候,它才会去执行查询,所以也不需要太担心效率的问题。如果出现效率问题的时候,针对特定部分进行优化就好了。
Ajax的应用
Ajax 作为现代网页开发必不可少的技术,好处还是非常明显的:
- 对于用户来说,在客户端有更好的用户体验。
- 对于服务器来说,更有利于服务器端口的设计,每个端口的功能可以更单一,不管从设计还是实现上都更有利。
- 对 DOM 比较熟
- 对 Javscript 比较熟
- 理解异步局部刷新的思想
- 需要配合服务器端开发
通过 URL 参数传递
前一篇已经提过基本的 URL 的处理问题,这里主要说一下 URL 中的参数处理。在请求一个页面的时候,常常会用到一些参数,比如要查询一个产品的信息,那么就一般就需要将该产品的 id 传递给服务器。如果详细研究 http 请求的方式,会发现 POST 主要用于会改变服务器数据的情形;而 GET 用于不会改变服务器数据的情形,例如单纯的查询。在 Django 中,对于可以使用 GET 的情况,可以通过将参数混合在 URL 中来代替。比如:
- 常规的 GET 请求:http://mysite/detail/?pro_id=100&pro_var=200
- 参数混合在 URL 中:http://mysite/detail/100/200/
这里只说第二种方式,它需要对 URL 进行恰当的解析并定向到正确的页面,对于 Django 来说这是很自然的事,因为 Django 就是这么设计的(很多用 cgi 的网站也是这种方式)。这种方式的好处在哪里呢,我能想到的有:
- 看起来很清爽
- 更符合 URI 的概念
- 可以防止 sql 注入,因为 URL 在解析定位的时候就进行正则表达式匹配,匹配失败直接就无法定位到该页面,在这种情况下就省去了处理 sql 注入的麻烦
- 精确度高,使用正则表达式的匹配,可以对 URL 功能的定位进行有效的控制
- 配合 Django view 的使用很方便的使用传递到服务器的参数
虽然这种方式好处比较多,但是对于正则表达式苦手的同学来说,很有可能就会望而却步。不过我觉得花点时间去学习一下正则表达式是非常值得的,这东西功能强大用途广,属程序猿的必备工具。
URL 解析具体请认真参考官方文档。正则表达式可以参考这篇文章,我觉得写的很不错。
Class based view
对于一个 http 请求来说,最主要的就是返回一个结果:html 页面。在 Django 中,最基本的做法就是对某个 URL 定向到一个 python 方法,然后返回一个结果:
def info(request, args):
这样很直观,也很容易理解。但是还能进一步吗?当然可以!网络发展了这么多年,很多常见的情况的处理方式早已被摸索出来了,因此如果能适当的重用已有的模型就可以加速开发过程,而且对于 python 来说,高效的开发不正是其优势吗? Django 当然也想到了这一点,通过 class bassed view,我们就可以对一些常见的情况进行更有效的处理,重用现成的结构。class based view 是在 Django 1.5 中才加入的,我用的刚好就是 1.5。
认真的研习一下官方的文档,它也是比较容易学习和理解的。我在这个过程中遇到的最大问题是如何使用通过解析 URL 得到的那些参数,找遍了文档也没有找到。(也许是我看的方式不对,也许是它真的没有,反正我就是没看到)还好,Django 是开源的,有源码,通过看源码我终于还是找到了我想要的东西:在 class bassed view 里面这些参数被保存在 self.args 和 self.kwargs 里面。例如:
- url(r'^detail/(\d+)/$', DetailView.as_view(), name="detail") 可以通过 self.args[0] 来访问其参数(我实际并没有使用这种方式,因为我选择了下面一种,其实效果一样的)。
- url(r'^detail/(?P<pro_id>\d+), DetailView.as_view(), name="detail") 可以通过 self.kwargs['pro_id'] 来访问该参数。
学会使用它以后,网站开发会进一步变得爽快。Django 准备了许多 class view 以应对各种情况,适当的选用一个 view,可以大大的提高效率。
大总结:
我需要做的网站主要就是根据一些信息进行过滤并显示内容,然后在客户端通过 ajax 技术来提升用户体验,目前来看主要的功能就已经实现了。剩下的东西虽然也还不少,比如相应资源的管理页面,还有美化界面等等。但都没有什么可遇见的障碍了,只要花点时间做出来就可以了。
简单回顾一下最初的项目评估,总体来看对各个部分的估计还是比较准确的(其实我并没有规划项目时间,因为涉及到不少学习的内容):
- Apache 服务器的使用比我想象的要简单些,其实主要就是如何进行配置,花时间学习并实践一下还是不难。调试肯定会花上一些时间,这是避免不了的。
- 数据库最终选用了 sqlite3,而不是 mysql。由于我要做的网站数据量并不大,因此这两种数据库对我来说效果是一样的,选更方便的那一个就可以了。
- Python 的使用总体还是很愉快的,由于其语言特性,用起来确实很舒服。当然要想把它用顺手,深入学习下去还是很有必要的。
- Django 框架比我想象的要强大,由于学习全靠文档(辅以看源码),过程中还是常遇到各种麻烦,不过总体来说,成果还是非常喜人的,感觉用这一套框架,网站开发可以大大的加速。
- 我以前学做网站的时候,Ajax 技术才兴起没多久,还没来得急实践 Ajax 我就转做了 Android,于是这次算是首次实际使用 Ajax 技术,不过毕竟在网站开发方面还是有比较丰富的经验,而且对 Ajax 的思想还是比较清楚,因此这次的 Ajax 的实践可谓轻松加愉快。
- Gvim 学习使用 vim 已经有不短的时间了,但这次算是真正第一次用 vim 做项目开发的实践,总体感觉还是非常不错的,不愧为编辑器之神。之前用习惯了功能强大的 IDE,这次开发最大的不同是完全没有依赖智能提示,虽然一开始的时候不太习惯,但慢习惯之后就感觉非常的爽快。(vim 通过插件是可以有智能提示的,不过我并不希望自己太依赖智能提示。)
虽然网站并没有做完,但剩下的东西我觉得值得我写下来的应该不多了,毕竟都是我比较熟悉的了,或者是一些使用上的细节了,具体还是参考各个专业书籍比较靠谱。
- 利用 Apache 服务器搭建 Python 网站 (三)
- 利用 Apache 服务器搭建 Python 网站 (一)
- 利用 Apache 服务器搭建 Python 网站 (二)
- Apache搭建web网站服务器
- Linux下安装Apache服务器-- 搭建网站(2)
- rh333 - 利用apache搭建简易https服务器
- 【Jena使用手册】用Python访问Apache Jena数据库 利用Fuseki搭建HTTP访问服务器
- LAMP服务器环境搭建三、apache安装
- python+apache的服务器搭建问题
- 搭建Apache+web.py+mod_wsgi python服务器
- python Django搭建简单的个人博客网站(三)
- 利用Python搭建简易的Http服务器
- 利用nginx+apache+mysql+php+memcached+squid搭建门户网站
- 利用nginx+apache+mysql+php+memcached+squid搭建门户网站
- 利用Apache Bench进行网站服务器压力测试实例
- 配置Apache服务器(三)
- Apache服务器配置(三)
- Ubuntu 12.04下搭建Web网站服务器 (MySQL+PHP+Apache环境)
- Postgresql 锁浅析
- JAVA泛型详解
- 集中容易造成误伤的SEO方法,慎重
- HDU 4604 Deque
- 信息属性列表关键字 info.plist
- 利用 Apache 服务器搭建 Python 网站 (三)
- String Tale
- 浅谈.NET+IIS环境常见问题排障
- iOS定位原理和使用建议
- UVA 10340 - All in All 水~
- Spring三种实例化方法
- 稀疏矩阵的十字链表存储
- 利用php+mcDropdown实现文件路径可在下拉框选择
- BFS--hdoj2102