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;
- Django学习笔记之【应用和数据模型】
- 【django 学习笔记】09-数据模型高级进阶
- Cassandra学习笔记之数据模型
- 【django 学习笔记】17-集成已有的数据库和应用
- Django基础学习之Cookie 和 Sessions 应用
- Django基础学习之Cookie 和 Sessions 应用
- Django学习笔记之【Django初识】 .
- 学习笔记-地理数据模型
- 数据模型设计 学习笔记
- models数据模型学习笔记
- Django学习笔记之简介
- django学习笔记之登录
- Django学习笔记之二
- scrapy 和 django 学习笔记
- android学习笔记之概述ContentProvider数据模型概述
- 流畅的Python学习笔记之第一章 Python数据模型
- 初始django笔记之编写第一个django应用
- Django学习笔记之【Linux下Django的安装】
- c++讲义 第9章 多态性
- 用7z压缩目录下的所有文件(保留源文件名,后缀改为7z)
- uboot的编译及配置浅析
- C++讲义 第10章 模板
- JAVA 内部类
- Django学习笔记之【应用和数据模型】
- NLP with python 2 获取文本语料和词汇资源
- vmware下Linux Fedora1 分辨率调整为1024x576宽屏
- 开源网站地址汇总
- Impala查询流程日志分析
- 获得手机(真机)的电话联系人数据库表
- jsp 二级域名共享session
- Android Push Notification实现信息推送使用
- x264源码分析