由于Django是在一个快节奏的新闻编辑室环境下开发出来的,因此它被设计成让普通的网站开发工作简单而快 捷。以下简单介绍了如何用 Django 编写一个数据库驱动的Web应用程序。 本文档的目标是给你描述足够的技术细节能让你理解Django是如何工作的,但是它并不表示是一个新手指南或参考目录 – 其实这些我们都有! 当你准备新建一个项目,你可以 从新手指南开始 或者 深入阅读详细的文档. 设计你的模型(model)尽管你在 Django 中可以不使用数据库,但是它提供了一个完善的可以用 Python 代码描述你的数据库结构的对象关联映射(ORM)。 数据模型语法 提供了许多丰富的方法来展现你的模型 – 到目前为止,它已经解决了两个多年积累下来数据库架构问题。下面是个简单的例子,可能被保存为 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
享用便捷的 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() |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-6 00:34 , Processed in 0.016743 second(s), 17 queries .