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

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:

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

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

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

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 article
BEGIN;
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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值