Django的一目了然


由于Django是在一个快节奏的新闻编辑室环境下开发的,它的目的是使常见的Web开发任务,快速和容易。下面是如何编写使用Django的数据库驱动的Web应用程序的一个非正式的概述。

本文件的目的是给你足够的技术细节了解的Django是如何工作的,但是这并不打算成为一个教程或参考-但我们已经有了两个!当你准备开始一个项目,你可以 用本教程开始或潜水右转进入更详细的文档。

设计模型

虽然你可以使用Django没有数据库,它配备了一个 对象关系映射器中,你描述你的数据库布局在Python代码。

该数据模型的语法提供了许多丰富的代表你的模型的方法-迄今为止,它已经解决两年价值数据库的架构问题。下面是一个简单的例子,它可能会被保存在文件mysite的/新闻/ models.py:

from django.db import models


class Reporter(models.Model):

    full_name = models.CharField(max_length=70)


    # On Python 3: def __str__(self):

    def __unicode__(self):

        return self.full_name


class Article(models.Model):

    pub_date = models.DateField()

    headline = models.CharField(max_length=200)

    content = models.TextField()

    reporter = models.ForeignKey(Reporter)


    # On Python 3: def __str__(self):

    def __unicode__(self):

        return self.headline

安装

接下来,运行Django的命令行实用程序来自动创建数据库表:

$ python manage.py syncdb

在使用syncdb命令会在所有可用的模型和你对哪个表不存在数据库中创建表。

享受免费的API 

至此,你已经有了一个免费的,丰富的,Python的API 来访问您的数据。API是动态创建,无代码生成必要的:

# Import the models we created from our "news" app

>>> from news.models import Reporter, Article


# No reporters are in the system yet.

>>> Reporter.objects.all()

[]


# Create a new Reporter.

>>> r = Reporter(full_name='John Smith')


# Save the object into the database. You have to call save() explicitly.

>>> r.save()


# Now it has an ID.

>>> r.id

1


# Now the new reporter is in the database.

>>> Reporter.objects.all()

[<Reporter: John Smith>]


# Fields are represented as attributes on the Python object.

>>> r.full_name

'John Smith'


# Django provides a rich database lookup API.

>>> Reporter.objects.get(id=1)

<Reporter: John Smith>

>>> Reporter.objects.get(full_name__startswith='John')

<Reporter: John Smith>

>>> Reporter.objects.get(full_name__contains='mith')

<Reporter: John Smith>

>>> Reporter.objects.get(id=2)

Traceback (most recent call last):

    ...

DoesNotExist: Reporter matching query does not exist. Lookup parameters were {'id': 2}


# Create an article.

>>> from datetime import date

>>> a = Article(pub_date=date.today(), headline='Django is cool',

...     content='Yeah.', reporter=r)

>>> a.save()


# Now the article is in the database.

>>> Article.objects.all()

[<Article: Django is cool>]


# Article objects get API access to related Reporter objects.

>>> r = a.reporter

>>> r.full_name

'John Smith'


# And vice versa: Reporter objects get API access to Article objects.

>>> r.article_set.all()

[<Article: Django is cool>]


# The API follows relationships as far as you need, performing efficient

# JOINs for you behind the scenes.

# This finds all articles by a reporter whose name starts with "John".

>>> Article.objects.filter(reporter__full_name__startswith="John")

[<Article: Django is cool>]


# Change an object by altering its attributes and calling save().

>>> r.full_name = 'Billy Goat'

>>> r.save()


# Delete an object with delete().

>>> r.delete()

一个充满活力的管理界面:它不只是脚手架-它是整个房子¶

一旦你的模型的定义,Django的可以自动创建一个专业的,生产准备管理界面 -一个网站,让身份验证的用户添加,更改和删除对象。这是因为注册你的模型在管理网站一样简单:

# In models.py...


from django.db import models


class Article(models.Model):

    pub_date = models.DateField()

    headline = models.CharField(max_length=200)

    content = models.TextField()

    reporter = models.ForeignKey(Reporter)



# In admin.py in the same directory...


import models

from django.contrib import admin


admin.site.register(models.Article)

本公司秉承这里是你的网站是由工作人员编辑,或者一个客户端,或者只是你 - 你不希望有处理创建后台界面只是为了管理内容。

创建Django的应用程序之一典型的工作流程是建立模型,并得到管理员的网站并尽可能快地运行,因此您的员工(或客户)可以开始填充数据。然后,开发数据呈现给公众的方式。

设计你的网址

一个干净,优雅的URL方案是在一个高品质的Web应用程序中一个重要的细节。Django的鼓励美丽的URL设计,不把任何多余文字中的URL,比如,PHP或。ASP。

要设计一个应用程序的URL,创建一个名为Python模块的URLconf。为你的应用程序目录,它包含URL模式和Python回调函数之间的简单映射。的URLconfs也有助于去耦从Python代码的URL。

下面是一个URL配置可能看起来像在记者 / 条 上面的例子:

from django.conf.urls import patterns


urlpatterns = patterns('',

    (r'^articles/(\d{4})/$', 'news.views.year_archive'),

    (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),

    (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),

)

上面的URL映射的代码,就这么简单的正则表达式,为Python的回调函数的位置(“意见”)。正则表达式使用圆括号从URL到“捕捉”的价值观。当用户请求一个页面时,Django贯穿每个模式中,为了,并停止在第一个匹配所请求的URL。(如果其中没有一个匹配,Django会调用一个特殊情况404图)。这是极快的,因为正则表达式在加载时编译。

一旦匹配成功,Django导入并调用给定的观点,这是一个简单的Python函数。每个视图都被传递一个请求对象 - 其中包含请求的元数据 - 在正则表达式捕获的值。

例如,如果用户请求的URL“/ articles/2005/05/39323 /”时,Django会调用函数news.views.article_detail(请求, '2005', '05', '39323') 。

写下您的意见

每个视图是负责做两件事情之一:返回一个 HttpResponse对象包含请求页面的内容对象,或者抛出一个异常,如Http404异常。剩下的就是你了。

通常,一个视图根据参数中检索数据,加载一个模板,并呈现与检索到的数据的模板。下面是一个例子视图 year_archive从上面:

from django.shortcuts import render_to_response


def year_archive(request, year):

    a_list = Article.objects.filter(pub_date__year=year)

    return render_to_response('news/year_archive.html', {'year': year, 'article_list': a_list})

本示例使用Django的模板系统,它有几个强大的功能,但努力保持足够简单,非程序员使用。

设计你的模板¶

上面的代码加载新闻/ year_archive.html模板。

Django的有一个模板搜索路径,它可以让你尽量减少模板之间的冗余。在你的Django设置,您指定的目录列表来检查使用模板TEMPLATE_DIRS。如果模板未在第一个目录存在,它会检查第二个,依此类推。

比方说,新闻/ year_archive.html模板被发现。以下是可能的样子:

{% extends "base.html" %}


{% block title %}Articles for {{ year }}{% endblock %}


{% block content %}

<h1>Articles for {{ year }}</h1>


{% for article in article_list %}

    <p>{{ article.headline }}</p>

    <p>By {{ article.reporter.full_name }}</p>

    <p>Published {{ article.pub_date|date:"F j, Y" }}</p>

{% endfor %}

{% endblock %}

变量由双花括号包围。{{ article.headline }} 意味着可是点是不仅为属性查找使用“输出文章的标题属性的值。”:他们也可以做字典键查找,索引查找和函数调用。

注{{ article.pub_date |日期:“F Ĵ, Y“ }}使用Unix风格的“管”(简称“|”字符)。这就是所谓的模板过滤器,它是一种方法来筛选变量的值。在这种情况下,日期格式过滤器在给定的格式一个Python的datetime对象(如PHP的日期函数找到)。

你可以连续使用尽可能多的过滤器,只要你愿意。您可以编写自定义模板过滤器。您可以编写 自定义的模板标签,它运行自定义Python代码在幕后。

最后,Django使用“模板继承”的概念:这是什么 {% 延伸 “base.html模板” %}一样。它的意思是“先装所谓的'基地'的模板,它定义了一堆块,并填写块通过下列功能块。”总之,可以让您大大减少了冗余的模板:每个模板都有唯一确定什么是独有的模板。

这里的“base.html模板”模板,包括使用什么静态文件,可能看起来像:

{% load staticfiles %}

<html>

<head>

    <title>{% block title %}{% endblock %}</title>

</head>

<body>

    <img src="{% static "images/sitelogo.png" %}" alt="Logo" />

    {% block content %}{% endblock %}

</body>

</html>

简单地说,它定义站点(与该网站的标志)的外观和感觉,并提供了“洞”的子模板来填补。这使得一个网站重新设计的改变作为一个单独的文件轻松 - 基本模板。

它也可以让你创建多个版本的网站,用不同的基础模板,而重用子模板。Django的创作者已经用这种技术来创建网站的显着的不同手机版本 - 只需创建一个新的基本模板。

请注意,您不必使用Django的模板系统,如果你喜欢别的系统。尽管Django的模板系统是特别好,集成了Django的模型层,没有什么强迫你使用它。对于这个问题,你不必使用Django的数据库API,无论是。您可以使用其他数据库抽象层,可以读取XML文件,可以读取文件从磁盘,或者任何你想要的。每件作品的Django的 - 模型,视图,模板 - 从下一脱钩。

这仅仅是表面¶

这一直是Django的功能只是一个大概的了解。一些比较实用的功能:

一个缓存框架,与memcached的或其他的后端集成。

一个聚合框架,使创建RSS和Atom供稿作为写一个小的Python类一样简单。

更性感自动生成的管理功能 - 这个概述仅仅触及表面。

下一个明显的步骤是让你下载的Django,请阅读本教程并加入社区。感谢您的关注!


你可能感兴趣的:(Django的一目了然)