博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模型一
阅读量:7123 次
发布时间:2019-06-28

本文共 3028 字,大约阅读时间需要 10 分钟。

之前,我们讲述了用 Django 建造网站的基本途径: 建立视图和 URLConf 。 正如我们所阐述的,视图负责处理一些主观逻辑,然后返回响应结果。 作为例子之一,我们的主观逻辑是要计算当前的日期和时间。

在当代Web应用中,主观逻辑经常牵涉到与数据库的交互。数据库驱动网站 在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。 这个网站也可能会向访问者提供修改数据库数据的方法。

许多复杂的网站都提供了以上两个功能的某种结合。 例如 Amazon.com 就是一个数据库驱动站点的良好范例。 本质上,每个产品页面都是数据库中数据以 HTML格式进行的展现,而当你发表客户评论时,该评论被插入评论数据库中。

由于先天具备 Python 简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站。 本章深入介绍了该功能: Django 数据库层。

我们这里使用默认的sqlite。所以不需要进行太多的设置,如果需要使用其他的数据库的时候就需要进行额外的配置了。

假设你现在已经成功连接数据库,并且可以进行正常工作。现在让我们来创建一个Django app包含模型,视图和Django代码,并且形式为独立Python包的完整Django应用。

在这里要先解释一些术语,初学者可能会混淆它们。 在第二章我们已经创建了 project , 那么 project 和 app 之间到底有什么不同呢?它们的区别就是一个是配置另一个是 代码:

一个project包含很多个Django app以及对它们的配置。

技术上,project的作用是提供配置文件,比方说哪里定义数据库连接信息, 安装的app列表, TEMPLATE_DIRS ,等等。

一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。

例如,Django本身内建有一些app,例如注释系统和自动管理界面。 app的一个关键点是它们很容易移植到其他project和被多个project复用。

对于如何架构Django代码并没有快速成套的规则。 如果你只是建造一个简单的Web站点,那么可能你只需要一个app就可以了; 但如果是一个包含许多不相关的模块的复杂的网站,例如电子商务和社区之类的站点,那么你可能需要把这些模块划分成不同的app,以便以后复用。

虽然,你可以不用创建app,就能使用views,这一点已经被我们之前编写的视图函数的例子证明了 。 在那些例子中,我们只是简单的创建了一个称为views.py的文件,编写了一些函数并在URLconf中设置了各个函数的映射。 这些情况都不需要使用apps。

但是,系统对app有一个约定: 如果你使用了Django的数据库层(模型),你必须创建一个Django app。 模型必须存放在apps中。 因此,为了开始建造 我们的模型,我们必须创建一个新的app。

mysite项目文件下输入下面的命令来创建名叫books的app:

python manage.py startapp books

我们打开book文件中的 models.py来建立我们的数据库模型,

from django.db import modelsclass 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()class Author(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=40)    email = models.EmailField()class Book(models.Model):    title = models.CharField(max_length=100)    authors = models.ManyToManyField(Author)    publisher = models.ForeignKey(Publisher)    publication_date = models.DateField()

让我们来快速讲解一下这些代码的含义。 首先要注意的事是每个数据模型都是django.db.models.Model的子类。它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。 信不信由你,这些就是我们需要编写的通过Django存取基本数据的所有代码。


是时候安装我们的book模型了。打开settings.py 然后修改代码如下。

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'book',]

模型已经写好,也添加上了是时候同步数据库了。

python3 manage.py migrate

然后会反馈如下信息

Operations to perform:  Apply all migrations: admin, contenttypes, sessions, authRunning migrations:  No migrations to apply.  Your models have changes that are not yet reflected in a migration, and so won't be applied.  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

继续执行下书代码

$ python manage.py migrate#出现如下提示表示操作成功Operations to perform:  Apply all migrations: auth, sessions, admin, article, contenttypesRunning migrations:  Applying article.0001_initial... OK

 

转载于:https://www.cnblogs.com/A-FM/p/6398621.html

你可能感兴趣的文章
移动互联网发展
查看>>
结对-贪吃蛇游戏-开发环境搭建过程
查看>>
bzoj 1833: [ZJOI2010]count 数字计数
查看>>
PHP中spl_autoload_register()函数的用法
查看>>
SuperMap Object 基本编程
查看>>
Microsoft Visual J#2.0 Second Edition安装程序返回错误代码"1603'
查看>>
ubuntu12.04下配置android开发环境
查看>>
centOS 安装mp4box
查看>>
经典算法-链表(golang)
查看>>
淘宝双十一为什么会出现通道拥挤?
查看>>
java字符串的替换replace、replaceAll、replaceFirst的区别详解
查看>>
python常用内置函数详解
查看>>
云时代架构读后感四
查看>>
MySQL按照月进行统计
查看>>
解决python语言在cmd下中文乱码的问题
查看>>
如何遍历Set对象
查看>>
iOS之CALayer属性简介
查看>>
ucos 统计任务 OS_TaskStat()
查看>>
I.MX6 U-boot imxotp MAC address 写入
查看>>
Error: No EPCS layout data - looking for section [EPCS-C84018]
查看>>