标签:django
1.MTV模式
Django 里关注的是模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。在 MTV 开发模式中:
M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
2. 数据库配置
数据库的配置文件
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, # Django使用哪个数据库引擎 ‘NAME‘: ‘******‘, # 将数据库名称告知 Django ‘USER‘: ‘root‘, # 告诉 Django 用哪个用户连接数据库 ‘PASSWORD‘: ‘*********‘, # 告诉Django连接用户的密码 ‘HOST‘: ‘127.0.0.1‘, # 告诉 Django 连接哪一台主机的数据库服务器 ‘PORT‘: ‘3306‘, # 端口号 } }
3. 创建应用程序
在`` mysite`` 项目文件下输入下面的命令来创建`` books`` app:
python manage.py startapp books
这个命令在mysite目录下创建了一个books目录。这个目录包含:
books/
__init__.py
models.py
tests.py
views.py
在Python代码里定义模型
MTV里的M代表模型。 Django模型是用Python代码形式表述的数据在数据库中的定义。对数据层来说它等同于 CREATE TABLE 语句,只不过执行的是Python代码而不是 SQL,而且还包含了比数据库字段定义更多的含义。 Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。 Django也使用模型来呈现SQL无法处理的高级概念。
这里使用MySQL数据库,首先,在MySQL中创建数据库: CREATE DATABASE books
在这个数据库中,有 书籍/作者/出版商 三张表。这三张表的概念,字段,关系如下:
一个作者有姓,有名及email地址。
出版商有名称,地址,所在城市、省,国家,网站。
书籍有书名和出版日期。 它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一
个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外键[foreign key])
打开books文件夹下的models.py。添加如下代码:
# coding=utf-8 from django.db import models # Create your models here. # 创建表 class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() def __unicode__(self): return self.name class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() def __unicode__(self): return u‘%s %s‘ % (self.first_name, self.last_name) class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() def __unicode__(self): return self.title
这些代码相当于SQL语句的CREATE TABLE XXX.....
模型安装:
现在需要在数据库中创建表。首先在 Django 项目中 激活这些模型。 将 books app 添加到配置文件的已安装应用列表中即可完成此步骤。
再次编辑 settings.py 文件, 找到 INSTALLED_APPS 设置。 INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态。(将默认代码临时注释掉)
INSTALLED_APPS = ( # ‘django.contrib.admin‘, # ‘django.contrib.auth‘, # ‘django.contrib.contenttypes‘, # ‘django.contrib.sessions‘, # ‘django.contrib.messages‘, # ‘django.contrib.staticfiles‘, ‘books‘, # 数据库名称 )
用虾米的命令验证模型的有效性:
python manage.py validate
如果模型正确:
运行下面的命令来生成 CREATE TABLE 语句
python manage.py sqlall books
在这个命令行中, books 是app的名称。 和你运行 manage.py startapp 中的一样
用下面语句同步数据库:
python manage.py syncdb
执行成功之后,在数据库中用SHOW TABLES,查看同步结果:
基本数据访问
创建了模型,Django自动为这些模型提供了高级的Python API。 运行 python manage.py shell。
>>> from books.models import Publisher >>> p1 = Publisher(name=‘Apress‘, address=‘2855 Telegraph Avenue‘, ... city=‘Berkeley‘, state_province=‘CA‘, country=‘U.S.A.‘, ... website=‘http://www.apress.com/‘) >>> p1.save() >>> p2 = Publisher(name="O‘Reilly", address=‘10 Fawcett St.‘, ... city=‘Cambridge‘, state_province=‘MA‘, country=‘U.S.A.‘, ... website=‘http://www.oreilly.com/‘) >>> p2.save() >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Apress>, <Publisher: O‘Reilly>]
我们把Django中的方法与对应的SQL语句做对比:
方法 | Django | SQL |
---|---|---|
插入数据 | >>> p = Publisher(name=‘Apress‘, ... address=‘2855 Telegraph Ave.‘, ... city=‘Berkeley‘, ... state_province=‘CA‘, ... country=‘U.S.A.‘, ... website=‘http://www.apress.com/‘) # >>> p.save() | INSERT INTO books_publisher (name, address, city, state_province, country, website) VALUES (‘Apress‘, ‘2855 Telegraph Ave.‘, ‘Berkeley‘, ‘CA‘, ‘U.S.A.‘, ‘http://www.apress.com/‘); |
更新数据 | >>> p.id 52 # this will differ based on your own data >>> p.name = ‘Apress Publishing‘ >>> p.save() | UPDATE books_publisher SET name = ‘Apress Publishing‘ WHERE id=52; |
选择对象 | >>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O‘Reilly>] | >>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O‘Reilly>] |
数据过滤 | >>> Publisher.objects.filter(name=‘Apress‘) [<Publisher: Apress>] | SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name = ‘Apress‘; |
获取单个对象 | >>> Publisher.objects.get(name="Apress") <Publisher: Apress> | |
数据排序 |
标签:django
原文地址:http://4440271.blog.51cto.com/4430271/1656533