全部博文(2065)
分类: Python/Ruby
2009-05-13 20:04:49
Django
紧紧地遵循这种
MVC 模式,可以称得上是一种
MVC 框架。以下是
Django 中
M、V
和
C 各自的含义:
§
M ,数据存取部分,由django数据库层处理,本章要讲述的内容。
§
V ,选择显示哪些数据要及怎样显示的部分,由视图和模板处理。
§
C ,根据用户输入委派视图的部分,由
Django 框架通过按照
URLconf 设置,对给定
URL 调用合适的
python 函数来自行处理。
由于
C 由框架自行处理,而
Django 里更关注的是模型(Model)、模板(Template)和视图(Views),Django
也被称为MTV
框架 。在
MTV 开发模式中:
§
M 代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何确认有效性、包含哪些行为以及数据之间的关系等。
§
T 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。
§ V 代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。你可以把它看作模型与模板之间的桥梁。
2.数据库配置
象前面章节提到的 TEMPLATE_DIRS 一样,数据库配置也是在Django的配置文件里,缺省是 settings.py
DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = '' # Or path to database file if using sqlite3.
DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
将DB的配置信息写完整。
输入完设置后,测试一下配置情况。首先,转到在第二章创建的 mysite 项目目录,运行 python manage.py shell 命令。
>>>
from django.db import connection
>>>
cursor = connection.cursor()
如果没有显示什么错误信息,那么你的数据库配置是正确的。否则,你就得 查看错误信息来纠正错误。表 5-2 是一些常见错误。
编写Python代码是非常有趣的,保持用Python的方式思考会避免你的大脑在不同领域来回切换。
这可以帮助你提高生产率。不得不去重复写SQL,再写Python代码,再写SQL,…,会让你头都要裂了。
class Publisher(models.Model):
name = models.CharField(maxlength=30)
address = models.CharField(maxlength=50)
city = models.CharField(maxlength=60)
state_province = models.CharField(maxlength=30)
country = models.CharField(maxlength=50)
website = models.URLField()
class Author(models.Model):
salutation = models.CharField(maxlength=10)
first_name = models.CharField(maxlength=30)
last_name = models.CharField(maxlength=40)
email = models.EmailField()
headshot = models.ImageField(upload_to='/tmp')
class Book(models.Model):
title = models.CharField(maxlength=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
2.安装模型
完成这些代码之后,现在让我们来在数据库中创建这些表。要完成该向 工作,第一步是在 Django 项目中 激活 这些模型。将books app 添加到配置文件的已 installed apps 列表中即可完成此步骤。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'mysite.hello',
) #将我们的应用mysite.hello应用添加进来
现在我们可以创建数据库表了。首先,用下面的命令对校验模型的有效性:
python
manage.py validate
python
manage.py sqlall books
python
manage.py syncdb
到此DB已经可以在数据库中创建了哦。开始去执行一些数据操作了包括插入记录、更新等。
基本数据访问
现在我如果需要插入一条记录就不需要像之前那样做了用SQL执行的。可以直接这样操作就搞定了。
from books.models import Publisher
>>>
p1 = Publisher(name='Addison-Wesley', address='75 Arlington
Street',
... city='Boston', state_province='MA',
country='U.S.A.',
...
website='')#定义好一个模块构造方法
>>>
p1.save()#这样就搞定了非常地方便啊!
插入和更新数据
第一步
>>>
p = Publisher(name='Apress',
... address='2855 Telegraph
Ave.',
... city='Berkeley',
...
state_province='CA',
...
country='U.S.A.',
...
website='')
第二步:>>>
p.save()
接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是
执行 UPDATE SQL语句,而不是 INSERT 语句):
>>>
p.name = 'Apress Publishing'
>>>
p.save() #就相当于update操作了
选择对象:
整理一下在Django中如何实现跟SQL的动作一样的。比如说实现insert的话在django如何写
1.Django代码
>>> Publisher.objects.all()
相当于SQL的 SELECT id, name, address, city, state_province, country, website FROM book_publisher;
2.Django代码
Publisher.objects.filter(name="Apress Publishing"){where条件过滤}
相当于SQL的WHERE过滤 SELECT id, name, address, city, state_province, country, website FROM book_publisher WHERE name = 'Apress Publishing'
如果条件有多个的话可以这样写Publisher.objects.filter(country="U.S.A.", state_province="CA") 相当条件where country="U.S.A." and state_province
如果想实现where condition like '%A%'可用:Publisher.objects.filter(name__contains="press") 双下划线 表示like了
类似的SQL中的between and 等相关的操作。都是能够在Django中找到相关的代码实现的。
3.实现数据排序就是SQL中的order by 操作
Publisher.objects.order_by("name") 相当的SQL代码如下的:
SQL语句:SELECT id, name, address, city, state_province, country, website
FROM book_publisher ORDER BY name;
**ordering = ["name"]** #事先指定好那以后就不用去管它了。
>>> p.delete() 相当于执行了delete from 表名 where name=''
通常更好的方法是给你的数据模型添加激活标志。你可以只在激活的对象中查找,
对于不需要的对象,将激活字段值设为 False ,
而不是删除对象。这样,
如果一旦你认为做错了的话,只需把标志重设回来就可以了。