http://www.oschina.net/translate/simplifying-django
尽管Django的流行和普及, 一些开发者仍然认为她是一个过时的web开发框架, 仅仅适合内容丰富的web程序。 然而现在大多数web程序往往不是富内容的, 这似乎让Django看起来不是最佳选择的web框架。
那么让我们花点时间从现在的web开发实践中重新认识下她吧。
|
顶 翻译的不错哦!
|
简单清晰的Django
一个web框架主要是帮助web程序生成核心的架构, 以便在其他的项目中重用。 Django正是以此为基础, 快速构建web程序。 Django的核心主要是WSGI程序, 通过处理HTTP请求并返回有意义的HTTP应答。 她提供了各种工具, 像生成URL路由, cookie的处理, 解析表单数据和上传文件。
还有, Django为HTTP应答创建了动态的模板引擎。你可以立马使用, 为了丰富web程序构建体验, 她提供了很多的各种各样的过滤器和标签, 去创建动态的可扩展模板。
|
顶 翻译的不错哦!
|
通过这些工具, 你能轻松地在Django的项目中创建简单清晰的微型框架。
我们知道有些人喜欢自己造轮子。 我们不是说贬低这种行为, 但是使用Django开发的话会让我们有更少的干扰。 比如, 当你在纠结 Jinja2,, Mako, Genshi, Cheetah的时候, 你可能已经在使用Django已存在的模板引擎。 更少的纠结让我们更多的享受愉快的开发过程。
|
顶 翻译的不错哦!
|
培训新的Django使用者
在Django和其他的web框架的社区中有一个很大的问题, 就是对新使用者的培训问题。 就像有很多Django使用者是通过Django官网上的创建一个投票程序来学习Django的。 我们很多老道的Django开发者认为它是一个进入Django社区的“通过仪式”。 但是它是学习Django最好的方法吗? 我觉得不是。
目前, 这个投票程序有六个部分。 虽然每个部分都有它的意义, 但是直到第三个你才能写你的视图和构造HTTP应答。 相比较简单的“Hello World”程序在某些流行的python微型框架(像Flask和Bottle)的首页而言, 这太遥远了。 最好的学习方法是当我们学习Django的某一块的时候没有过多的阻碍, 并且能够专注于处理请求和应答的交互上。 新使用者在构建常见的web任务的时候能从框架的其他部分中获得帮助, 像回话管理, 用户验证和内置的admin接口。
|
顶 翻译的不错哦!
|
那么, 按照我们的意思来构建一个简化版的Django教程:
03 |
from django.conf import settings |
04 |
from django.conf.urls import patterns |
05 |
from django.http import HttpResponse |
06 |
from django.core.management import execute_from_command_line |
10 |
SECRET_KEY = 'placerandomsecretkeyhere' , |
11 |
ROOT_URLCONF = sys.modules[__name__], |
15 |
return HttpResponse( 'Powered by Django' ) |
17 |
urlpatterns = patterns('', |
21 |
if __name__ = = "__main__" : |
22 |
execute_from_command_line(sys.argv) |
简单吧。 这段简短的代码是运行Django项目所需要的全部。 让我们开始逐步解释下各部分代码吧。
首先, 我们需要确保引入了HttpResponse, 并且返回我们希望返回的内容。
1 |
from django.http import HttpResponse |
4 |
return HttpResponse( 'Powered by Django' ) |
一般来说, 这段代码应该在view.py里面。 不过在这个简化版的教程中, 我们把Django项目中所有代码放在一个单一的文件。
|
顶 翻译的不错哦!
|
应用的当前部分与下一部分的完美纽带是链接结构。上面的代码就期望这样的一个url索引,所以我们需要为它创建一个。
1 |
from django.conf.urls import patterns |
2 |
from django.http import HttpResponse |
5 |
return HttpResponse( 'Powered by Django' ) |
7 |
urlpatterns = patterns('', |
仅仅通过以上7行代码我们就为应用程序构建好了在Django上运行的基础!现在,让我们完成一些基本设置,使应用程序可以执行起来。
03 |
from django.conf import settings |
04 |
from django.conf.urls import patterns |
05 |
from django.http import HttpResponse |
09 |
SECRET_KEY = 'placerandomsecretkeyhere' , |
10 |
ROOT_URLCONF = sys.modules[__name__], |
14 |
return HttpResponse( 'Powered by Django' ) |
16 |
urlpatterns = patterns('', |
你可能已经发现在上面的例子中,我们已经剥离了那些设置,并且尤其是省略了数据库的配置。这些设置将可以作为一个针对新用户进入的门槛,当这些新用户试图确定使用什么数据库时,可能避免出现混乱的情况。当开发一个项目时,我们希望确保自己的工作专注于特定部分,从而降低工作中的阻碍。
|
顶 翻译的不错哦!
|
注意:在settings.configure文件里设置随机的 SECRET_KEY以便保护session and cross-site request forgery (CSRF).
由于没有使用 start project命令生成该结构,我们会丢掉manage.pyfile文件.因此需要手工添加相关的manage.pyand信息:
03 |
from django.conf import settings |
04 |
from django.conf.urls import patterns |
05 |
from django.http import HttpResponse |
06 |
from django.core.management import execute_from_command_line |
10 |
SECRET_KEY = 'placerandomsecretkeyhere' , |
11 |
ROOT_URLCONF = sys.modules[__name__], |
15 |
return HttpResponse( 'Powered by Django' ) |
17 |
urlpatterns = patterns('', |
21 |
if __name__ = = "__main__" : |
22 |
execute_from_command_line(sys.argv) |
现在可以从命令行启动应用了:
1 |
$ python project_name.py runserver |
访问 127.0.0.1:8000, 会看到 “Powered by Django”页面了!
|
顶 翻译的不错哦!
|
看到这里, 你可能要问: “模型和视图在哪呢?”。 在此之前让我们先放松一下。 让我们讨论下Django到底是什么--她是一个包含一系列我们经常需要用到的工具的web框架, 并且你能很容易在项目中引用它们。 接下来我们将介绍如何引入这些工具。 构建一个模板就是个不错的列子。 让我们开始动手吧。
添加模板文件前我们要添加urls和一些必要设置, 要让Django知道模板文件放在哪。 把这些设置添加到文件里吧。
04 |
BASE_PATH = os.path.dirname(__file__) |
06 |
from django.conf import settings |
07 |
from django.conf.urls import patterns, url |
08 |
from django.core.management import execute_from_command_line |
09 |
from django.shortcuts import render |
13 |
SECRET_KEY = 'placerandomsecretkeyhere' , |
14 |
ROOT_URLCONF = sys.modules[__name__], |
16 |
os.path.join(BASE_PATH, 'templates' ), |
21 |
return render(request, 'index.html' , { 'request' : request}) |
23 |
urlpatterns = patterns('', |
24 |
url(r '^$' , index, name = 'index' ), |
27 |
if __name__ = = "__main__" : |
28 |
execute_from_command_line(sys.argv) |
|
顶 翻译的不错哦!
|
你会注意到在顶部我们增加了os.path Python模块的导入。通过这样做,我们已经为新用户创建了一种容易的方式指向他们的项目文件夹。现在我们能在我们的TEMPLATE_DIRS设置中轻松的添加指向模板的路径,并开始体验Django的内置标签和过滤器的优势!
正如你可以看到,通过将创建一个Django应用程序的基础部分分解成较小的部分,我们可以创建一个更简单的方法给内建的新用户。我们需要重新学习怎样让Django在没有ORM和Django管理的时候创建Django应用程序。需要认识到Django的那些内置功能他们真是的是什么。在使用框架时他们不是必须的,如果你感觉他们不是必须的,你并没有失去太多。我们开始使用Django好的部分而不是感觉它的重量,就像我们学习Python的标准库。让我们开始移去过时的东西,看看它的源码,功能真的是很丰富。
因此,基于所有的这些,在轻量的模式中你正在考虑构建一些能够开发什么的应用程序?
|
- django 用model来简化form
django里面的model和form其实有很多地方有相同之处,django本身也支持用model来简化form 一般情况下,我们的form是这样的 from django import forms ...
- Django 修改视图文件(views.py)并加载Django模块 + 利用render_to_response()简化加载模块 +locals()
修改视图代码,让它使用 Django 模板加载功能而不是对模板路径硬编码.返回 current_datetime 视图,进行如下修改: from django.template.loader impo ...
- Django学习路31_使用 locals 简化 context 写法,点击班级显示该班学生信息
urls 中 进行注册 url(r'grades',views.grades) views 中编写函数 def grades(request): grades_list = Grade.objects ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- [原创]django+ldap实现统一认证部分一(django-auth-ldap实践)
前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 ,ldap部署相关,ldap双机\LAM配置管理\ldap备份还原,目前来说,我们已经有了高可用性的ldap环境了 ...
- Django基础之wsgi
Django 一 什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演 ...
- Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
- 【django】京东等大型网站的混合搜索是怎么实现的?
混合搜索在各大网站如京东.淘宝都有应用,他们的原理都是什么呢?本博文将为你介绍它们的实现过程. 混合搜索的原理,用一句话来说就是:关键字id进行拼接. 混合搜索示例: 数据库设计: 视频方向: cla ...
- python 学习笔记十七 django深入学习二 form,models
表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...
随机推荐
- centos安装g++
安装: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc gcc-c++
- 搬移到GitHub Page啦~
GitHub: https://github.com/BOT-Man-JL/ Page: https://BOT-Man-JL.github.io/
- SA密钥长度、明文长度和密文长度
本文介绍RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,RSA的复杂度是因为数学家把效率和安全也考虑进去的缘故. 本文先只谈密钥 ...
- JMeter 使用
Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: (1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为. (2)用户运行器:通常是一个脚本运行引擎,用户运行器附加 ...
- ASP.NET MVC 第五回 ActionResult的其它返回值
我们上边所看到的Action都是return View();我们可以看作这个返回值用于解析一个aspx文件.而它的返回类型是ActionResult如 public ActionResult Inde ...
- Weex 标签控件
1.滚动组件 <template> <scroller> <div repeat="{{list}}"> <text>{{name} ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- C#Socket编程socket.Connect权限出错问题及解决
最近使用Vs2010编写Socket程序,客户端在调用socket.Connect()时,总是出现: 请求“System.Net.SocketPermission, System, Version=4 ...
- [o] duplicate column name: _id 问题解决
Android下使用SQLite数据库,报错:duplicate column name: _id 数据库文件下有两列数据的名称一样,原因是定义数据类型时有重复,如,我的定义: //复制上一行增加TY ...
- Web性能压力测试之Webbench使用详解
Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发.Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同 ...