笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

初探 Django

发布者: 三寸日光

由于Django是在一个快节奏的新闻编辑室环境下开发出来的,因此它被设计成让普通的网站开发工作简单而快 捷。以下简单介绍了如何用 Django 编写一个数据库驱动的Web应用程序。

本文档的目标是给你描述足够的技术细节能让你理解Django是如何工作的,但是它并不表示是一个新手指南或参考目录 – 其实这些我们都有! 当你准备新建一个项目,你可以 从新手指南开始 或者 深入阅读详细的文档.

设计你的模型(model)

尽管你在 Django 中可以不使用数据库,但是它提供了一个完善的可以用 Python 代码描述你的数据库结构的对象关联映射(ORM)。

数据模型语法 提供了许多丰富的方法来展现你的模型 – 到目前为止,它已经解决了两个多年积累下来数据库架构问题。下面是个简单的例子,可能被保存为 mysite/news/models.py:

class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    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)

    def __unicode__(self):
        return self.headline

安装它

下一步,运行 Django 命令行工具来自动创建数据库表:

manage.py syncdb

syncdb 命令会查找你所有可用的模型(models)然后在你的数据库中创建还不存在的数据库表。

享用便捷的 API

接着,你就可以使用一个便捷且功能丰富的 Python API 来访问你的数据。API 是动态生成的,不需要代码生成:

# 导入我们在 "news "应用中创建的模型。
>>> from news.models import Reporter, Article

# 在系统中还没有 reporters 。
>>> Reporter.objects.all()
[]

# 创建一个新的 Reporter 。
>>> r = Reporter(full_name='John Smith')

# 将对象保存到数据库。你需要显示的调用 save() 方法。
>>> r.save()

# 现在它拥有了一个ID。
>>> r.id
1

# 现在新的 reporter 已经存在数据库里了。
>>> Reporter.objects.all()
[<Reporter: John Smith>]

# 字段被表示为一个 Python 对象的属性。
>>> r.full_name
'John Smith'

# Django 提供了丰富的数据库查询 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}

# 创建一个 article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# 现在 article 已经存在数据库里了。
>>> Article.objects.all()
[<Article: Django is cool>]

# Article 对象有 API 可以访问到关联到 Reporter 对象。
>>> r = a.reporter
>>> r.full_name
'John Smith'

# 反之亦然:Reporter 对象也有访问 Article 对象的API。
>>> r.article_set.all()
[<Article: Django is cool>]

# API 会在幕后高效的关联表来满足你的关联查询的需求。
# 以下例子是找出名字开头为 "John" 的 reporter 的所有 articles 。
>>> Article.objects.filter(reporter__full_name__startswith="John")
[<Article: Django is cool>]

# 通过更改一个对象的属性值,然后再调用 save() 方法来改变它。
>>> r.full_name = 'Billy Goat'
>>> r.save()

# 调用 delete() 方法来删除一个对象。
>>> r.delete() 

12下一页
下一篇:设计你的 URLs

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-5-9 05:40 , Processed in 0.020681 second(s), 17 queries .

© 2001-2020

返回顶部