第一章的内容没什么特别重要不做翻译,从2.1开始不定时翻译,翻译内容也不定,因为自己一边学一边翻译.
2.1 Django 的大致浏览
因为django在一个快节奏的环境下开发,它用来使一般的web开发变得快速而简单.这是一个关于如何用django创建一个基于数据库的web app的概述.
2.1.1 设计你的模型
尽管你可以在没有数据库的情况下使用django,在你的python代码里描述数据库框架时会带上其对象关系映射.
数据模型语法(data-model synax)提供了丰富的方式来展示你的模型,迄今为止,它已经解决了许多年的数据库模式问题.这里有一个简单的例子:
mysite/news/models.py
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self): # __unicode__ on Python 2
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_delete=models.CASCADE)
def __str__(self): # __unicode__ on Python 2
return self.headline
2.1.2 安装
然后, 运行django命令行来自动生成数据库表:
$ python manage.py migrate
migrate命令查找你所有可查看的模型,然后对于数据库中不存在的表单自动创建,同样也作为可选的,提供了更丰富的语法控制
2.1.3 享受自由的API
通过上面的命令,从你的数据中可以获得一个自由的丰富的python api, api是在命令运行中生成的,不需要专门代码生成:
# 导入 news app中创建的模型
>>> from news.models import Reporter, Article
# 系统中还没有reporters.
>>> Reporter.objects.all() [] # Create a new Reporter.
>>> r = Reporter(full_name='John Smith')
# 将对象保存在数据库里,需要调用save()方法
>>> r.save() # 现在生成了一个id.
>>> r.id 1 # 现在一个新的reporter存在数据库里.
>>> Reporter.objects.all() [] # 在python对象中,对象作为属性展示出来
>>> r.full_name 'John Smith' # Django提供一个丰富的数据库来查寻API(?)
>>> Reporter.objects.get(id=1)
>>> Reporter.objects.get(full_name__startswith='John')
>>> Reporter.objects.get(full_name__contains='mith')
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Reporter matching query does not exist.
# 创建一个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对象获得了API权限来关联一个reporter对象
>>> r = a.reporter
>>> r.full_name 'John Smith' # And vice versa: Reporter 对象获得了API权限来关联一个Article对象.
>>> r.article_set.all() []
# API遵循你需要的关系,并且能够高效执行
# JOINs for you behind the scenes.(在后台添加关联的意思?)
# 这条命另查找'John'开头的reporter的所有articles.
>>>Article.objects.filter(reporter__full_name__startswith='John') []
# 改变一个对象通过改变其属性并且调用save方法
>>> r.full_name = 'Billy Goat'
>>> r.save() # delete()方法删除一个对象
>>> r.delete()
原文档请参照Django1.9.1 Documentation