简化 Django 已翻译 100%

renwofei423 投递于 2014/04/29 15:52 (共 9 段, 翻译完成于 05-04)
阅读 4286
收藏 129
9
加载中

尽管Django的流行和普及, 一些开发者仍然认为她是一个过时的web开发框架, 仅仅适合内容丰富的web程序。 然而现在大多数web程序往往不是富内容的, 这似乎让Django看起来不是最佳选择的web框架。

那么让我们花点时间从现在的web开发实践中重新认识下她吧。

我是小智
翻译于 2014/05/02 14:48
2

简单清晰的Django

一个web框架主要是帮助web程序生成核心的架构, 以便在其他的项目中重用。 Django正是以此为基础, 快速构建web程序。 Django的核心主要是WSGI程序, 通过处理HTTP请求并返回有意义的HTTP应答。 她提供了各种工具, 像生成URL路由, cookie的处理, 解析表单数据和上传文件。

还有, Django为HTTP应答创建了动态的模板引擎。你可以立马使用, 为了丰富web程序构建体验, 她提供了很多的各种各样的过滤器和标签, 去创建动态的可扩展模板。

我是小智
翻译于 2014/05/02 15:21
2

通过这些工具, 你能轻松地在Django的项目中创建简单清晰的微型框架。

我们知道有些人喜欢自己造轮子。 我们不是说贬低这种行为, 但是使用Django开发的话会让我们有更少的干扰。 比如, 当你在纠结 Jinja2,, Mako, Genshi, Cheetah的时候, 你可能已经在使用Django已存在的模板引擎。 更少的纠结让我们更多的享受愉快的开发过程。

我是小智
翻译于 2014/05/02 15:54
2

培训新的Django使用者

在Django和其他的web框架的社区中有一个很大的问题, 就是对新使用者的培训问题。 就像有很多Django使用者是通过Django官网上的创建一个投票程序来学习Django的。 我们很多老道的Django开发者认为它是一个进入Django社区的“通过仪式”。 但是它是学习Django最好的方法吗? 我觉得不是。

目前, 这个投票程序有六个部分。 虽然每个部分都有它的意义, 但是直到第三个你才能写你的视图和构造HTTP应答。 相比较简单的“Hello World”程序在某些流行的python微型框架(像Flask和Bottle)的首页而言, 这太遥远了。 最好的学习方法是当我们学习Django的某一块的时候没有过多的阻碍, 并且能够专注于处理请求和应答的交互上。 新使用者在构建常见的web任务的时候能从框架的其他部分中获得帮助, 像回话管理, 用户验证和内置的admin接口。

我是小智
翻译于 2014/05/02 17:47
2

那么, 按照我们的意思来构建一个简化版的Django教程:

import sys
 
from django.conf import settings
from django.conf.urls import patterns
from django.http import HttpResponse
from django.core.management import execute_from_command_line
 
settings.configure(
    DEBUG=True,
    SECRET_KEY='placerandomsecretkeyhere',
    ROOT_URLCONF=sys.modules[__name__],
)
 
def index(request):
    return HttpResponse('Powered by Django')
 
urlpatterns = patterns('', 
    (r'^$', index),
)
 
if __name__ == "__main__":
    execute_from_command_line(sys.argv)

简单吧。 这段简短的代码是运行Django项目所需要的全部。 让我们开始逐步解释下各部分代码吧。

首先, 我们需要确保引入了HttpResponse, 并且返回我们希望返回的内容。

from django.http import HttpResponse
 
def index(request):
    return HttpResponse('Powered by Django')

一般来说, 这段代码应该在view.py里面。 不过在这个简化版的教程中, 我们把Django项目中所有代码放在一个单一的文件。

我是小智
翻译于 2014/05/03 22:15
2

应用的当前部分与下一部分的完美纽带是链接结构。上面的代码就期望这样的一个url索引,所以我们需要为它创建一个。

from django.conf.urls import patterns
from django.http import HttpResponse
 
def index(request):
    return HttpResponse('Powered by Django')
 
urlpatterns = patterns('', 
    (r'^$', index),
)

仅仅通过以上7行代码我们就为应用程序构建好了在Django上运行的基础!现在,让我们完成一些基本设置,使应用程序可以执行起来。

import sys
 
from django.conf import settings
from django.conf.urls import patterns
from django.http import HttpResponse
 
settings.configure(
    DEBUG=True,
    SECRET_KEY='placerandomsecretkeyhere',
    ROOT_URLCONF=sys.modules[__name__],
)
 
def index(request):
    return HttpResponse('Powered by Django')
 
urlpatterns = patterns('', 
    (r'^$', index),
)

你可能已经发现在上面的例子中,我们已经剥离了那些设置,并且尤其是省略了数据库的配置。这些设置将可以作为一个针对新用户进入的门槛,当这些新用户试图确定使用什么数据库时,可能避免出现混乱的情况。当开发一个项目时,我们希望确保自己的工作专注于特定部分,从而降低工作中的阻碍。

只能怪小名
翻译于 2014/05/03 12:53
2

注意:在settings.configure文件里设置随机的 SECRET_KEY以便保护session and cross-site request forgery (CSRF).

由于没有使用 start project命令生成该结构,我们会丢掉manage.pyfile文件.因此需要手工添加相关的manage.pyand信息:

import sys
 
from django.conf import settings
from django.conf.urls import patterns
from django.http import HttpResponse
from django.core.management import execute_from_command_line
 
settings.configure(
    DEBUG=True,
    SECRET_KEY='placerandomsecretkeyhere',
    ROOT_URLCONF=sys.modules[__name__],
)
 
def index(request):
    return HttpResponse('Powered by Django')
 
urlpatterns = patterns('', 
    (r'^$', index),
)
 
if __name__ == "__main__":
    execute_from_command_line(sys.argv)

现在可以从命令行启动应用了:

$ python project_name.py runserver

访问 127.0.0.1:8000, 会看到  “Powered by Django”页面了!

simplifying_django_fig_1

petert
翻译于 2014/05/02 11:50
2

看到这里, 你可能要问: “模型和视图在哪呢?”。 在此之前让我们先放松一下。 让我们讨论下Django到底是什么--她是一个包含一系列我们经常需要用到的工具的web框架, 并且你能很容易在项目中引用它们。 接下来我们将介绍如何引入这些工具。 构建一个模板就是个不错的列子。 让我们开始动手吧。

添加模板文件前我们要添加urls和一些必要设置, 要让Django知道模板文件放在哪。 把这些设置添加到文件里吧。

import os
import sys
 
BASE_PATH = os.path.dirname(__file__)
 
from django.conf import settings
from django.conf.urls import patterns, url
from django.core.management import execute_from_command_line
from django.shortcuts import render
 
settings.configure(
    DEBUG=True,
    SECRET_KEY='placerandomsecretkeyhere',
    ROOT_URLCONF=sys.modules[__name__],
    TEMPLATE_DIRS=(
        os.path.join(BASE_PATH, 'templates'),
    ),
)
 
def index(request):
    return render(request, 'index.html', {'request': request})
 
urlpatterns = patterns('', 
    url(r'^$', index, name='index'),
)
 
if __name__ == "__main__":
    execute_from_command_line(sys.argv)
我是小智
翻译于 2014/05/03 22:56
2

你会注意到在顶部我们增加了os.path Python模块的导入。通过这样做,我们已经为新用户创建了一种容易的方式指向他们的项目文件夹。现在我们能在我们的TEMPLATE_DIRS设置中轻松的添加指向模板的路径,并开始体验Django的内置标签和过滤器的优势!

正如你可以看到,通过将创建一个Django应用程序的基础部分分解成较小的部分,我们可以创建一个更简单的方法给内建的新用户。我们需要重新学习怎样让Django在没有ORM和Django管理的时候创建Django应用程序。需要认识到Django的那些内置功能他们真是的是什么。在使用框架时他们不是必须的,如果你感觉他们不是必须的,你并没有失去太多。我们开始使用Django好的部分而不是感觉它的重量,就像我们学习Python的标准库。让我们开始移去过时的东西,看看它的源码,功能真的是很丰富。

因此,基于所有的这些,在轻量的模式中你正在考虑构建一些能够开发什么的应用程序?

地狱星星
翻译于 2014/05/04 16:02
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(25)

donghui2020
donghui2020
一个python文件什么都干了
cottage
cottage

引用来自“cottage”的评论

Django的模板实在是难用。。。

引用来自“jluflyingz”的评论

可以使用jinja2,非常不错

引用来自“cottage”的评论

同感,就是用后台模板啥的就不方便了,究竟不是原生。唉。。。

引用来自“yanziqiguo”的评论

哥们,你不知道自定义模板标签吗?
哥们,说的就是“自定义模板标签“ 和jinja2比起来,django的这个特点有时很麻烦。比如项目急着上线的时候,哪有那么多时间;如果随便一行代码就能搞定的(jinja2,mako可以模板里直接写python表达式),哪有空去整“自定义模板标签”
yanziqiguo
yanziqiguo
写得不错,理解得很深刻,我正在用django开发项目
yanziqiguo
yanziqiguo

引用来自“cottage”的评论

Django的模板实在是难用。。。

引用来自“jluflyingz”的评论

可以使用jinja2,非常不错

引用来自“cottage”的评论

同感,就是用后台模板啥的就不方便了,究竟不是原生。唉。。。
哥们,你不知道自定义模板标签吗?
cottage
cottage

引用来自“cottage”的评论

Django的模板实在是难用。。。

引用来自“jluflyingz”的评论

可以使用jinja2,非常不错
同感,就是用后台模板啥的就不方便了,究竟不是原生。唉。。。
cottage
cottage

引用来自“cottage”的评论

Django的模板实在是难用。。。

引用来自“Mr6”的评论

请问你用了多久?
Django的模板很"学院化",和jinja2比起来很难用! 比如模板里做一些简单的处理,jinja2里直接写python表达式,django非得整个filter。这么严格一些场景下也有好处吧,可实际工作中更多的是快速反应及时上线啊。做了几个项目,感觉蛮麻烦。 django其它部分还成,模板较难用。
刘亚辉

好东西

5292401
5292401

引用来自“cottage”的评论

Django的模板实在是难用。。。

请问你用了多久?
sunnytu
sunnytu

个人认为django的精髓是orm

雪候鸟
雪候鸟

感觉不错呀,我们的项目都用了一年多了,改起来很方便,可以实现循环迭代,增量发布,效果很好。

返回顶部
顶部
返回顶部
顶部