Django学习笔记之【应用和数据模型】

来源:互联网 发布:天通金行情软件下载 编辑:程序博客网 时间:2024/06/14 05:06

Django作为一个Web框架,目的是实现MVC的分离,它可以自行处理 一些通用的操作,让开发人员可以专注于核心应用的开发。

现在一个工程环境就创建起来了,你现在可以让他工作起来。

你写的每个django应用都包含爱一个python包中,你的python路径某个地方,遵循一个确定的规则。

django带有一个自动生成应用程序基本目录结构的功能,因此你可以专注写代码而不用创建目录。

 

在这篇指导里,我们简单的在mysite目录里创建我们的投票程序,因而应用将和工程联系起来,投票程序将关联到mysite.polls.

接下来,我们将讨论应用程序的解耦。

 

确定你在mysite目录,创建你的应用,执行这个命令

python manage.py startapp polls


创建一个polls目录,布局如下:

polls/    __init__.py    models.py    views.py


 

  • models.py:模型文件,用一个 Python 类来描述数据表,运用它可以通过简单的 Python 的代码来创建、检索、更新、删除数据库中的记录而无需写一条又一条的SQL语句。
  • views.py:视图文件,用来联系模型与模版。

 

这些概念用简单的python类描述出来,像下面这样编辑books/models.py 

 

from django.db import models## Create your models here.from django.db import models       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 Meta:         ordering = ['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



 

每个字段用一个Field类实例描述,CharField用于字符字段,DateTimeField  用于时间日期,这样告诉django掌握每个字段的类型。

field实例的名字就是这个field字段的名字,是友好的格式,在python里取值用,在数据库中当做表列名用。

你可以为Field指定参数,增加可读性。 

一些Field类有必填元素,例如CharField需要指定max_length,这个参数不只是用在数据库元数据上,还用户数据校验。

最后,注意关心定义,使用ForeignKey.这个告诉Django每个选项关联到一个单独的投票上,Django支持所有数据关系定义。

多对一,多对多,一对一。

 

激活模型

 

一小段模型代码为Django提供了很多信息,通过这个,DJANGO将做如下事情

1.为应用程序创建数据库元数据

2.为投票对象,选项对象创建数据库操作API

 

不过首先我们需要先告诉工程投票程序安装好

再次编辑settings.py,修改INSTALLED_APPS设置,加入'mysite.books'. 如下

 

1.INSTALLED_APPS = (   2.    'django.contrib.auth',   3.    'django.contrib.contenttypes',   4.    'django.contrib.sessions',   5.    'django.contrib.sites',   6.    'mysite.books'  7.)  


默认配置中INSTALLED_APPS  包含了下面的应用,都是来源django:

  • django.contrib.auth  -- 一个认证系统.
  • django.contrib.contenttypes  -- 一个内容类型架构.
  • django.contrib.sessions   -- 一个会话架构.
  • django.contrib.sites  -- 一个多站管理架构. 

这些应用默认包含以方便大多数情况的应用. 

每个应用都至少用到一个数据表,因此我们需要先在数据库中创建表.

 我们可以通过运行下面的命令来实现

python manage.py syncdb  


syncdb   命令会查看 INSTALLED_APPS   设置并创建必要的数据表根据数据库设置参数.你将会看到每个数据表创建的信息,并且会提示你是否创建一个认证系统的超级管理账号,继续。。

 

现在django知道mysite包含了polls应用. 我们运行另一个命令:

python manage.py sql books


你应该会看到类似如下的输出 (创建poll和choice的sql语句):

 

[ly@localhos1 mysite]$ python manage.py sql articleBEGIN;CREATE TABLE "article_publisher" (    "id" integer NOT NULL PRIMARY KEY,    "name" varchar(30) NOT NULL,    "address" varchar(50) NOT NULL,    "city" varchar(60) NOT NULL,    "state_province" varchar(30) NOT NULL,    "country" varchar(50) NOT NULL,    "website" varchar(200) NOT NULL);CREATE TABLE "article_author" (    "id" integer NOT NULL PRIMARY KEY,    "first_name" varchar(30) NOT NULL,    "last_name" varchar(40) NOT NULL,    "email" varchar(75) NOT NULL);CREATE TABLE "article_book_authors" (    "id" integer NOT NULL PRIMARY KEY,    "book_id" integer NOT NULL,    "author_id" integer NOT NULL REFERENCES "article_author" ("id"),    UNIQUE ("book_id", "author_id"));CREATE TABLE "article_book" (    "id" integer NOT NULL PRIMARY KEY,    "title" varchar(100) NOT NULL,    "publisher_id" integer NOT NULL REFERENCES "article_publisher" ("id"),    "publication_date" date NOT NULL);COMMIT;


原创粉丝点击