一、引子

Django最初设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发!

从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。同时,Django 尝试留下一些方法,来让你根据需要在framework之外来开发。

二、设计模型

Django无需数据库就可以使用,它提供了对象关系映射起(ORM)。通过此技术,你可以使用Python代码来描述数据库结构。

数据模型语法提供了很多方法来描述你的数据,这解决了多年来数据库模式中的难题。以下是一个简明的例子:

# mysite/news/models.py
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self): # Python 2 下请使用 __unicode__
return self.full_name
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter)
def __str__(self): # Python 2 下请使用 __unicode__
return self.headline

二、创建模型

运行Django命令行工具来创建数据库表。

$ python manage.py migrate

migrate命令会查找所有可用的模型,如果数据库中没有与之对应的表,则会为其自动创建。Django提供了其他更丰富的方式。

三、享用便捷的API

现在可用使用一套便捷而丰富的Python API用语访问你的数据。这些API是自动即创建的,你不用编写其他任何代码。

# 从我们的 news 应用里导入模型(译注:记者和文章模型)。
>>> from news.models import Reporter, Article
# 现在系统中还没有记者。
>>> Reporter.objects.all()
<QuerySet []>
# 创建一个 Reporter 对象。
>>> r = Reporter(full_name='John Smith')
# 将对象保存到数据库。save()方法需要被显式调用。
>>> r.save()
# 现在它有了id。
>>> r.id
1
# 现在这个新人记者已经在数据库里了。
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>
# 字段被表示成 Python 对象中的属性。
>>> r.full_name
'John Smith'
# Django 提供了一套丰富的数据库查找 API。
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Reporter matching query does not exist.
# 创建一篇文章。(译注:reporter放入了前面创建的r对象)
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
... content='Yeah.', reporter=r)
>>> a.save()
# 现在文章在数据库里了。
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>
# 通过 Article 对象可以访问与其关联的 Reporter 对象。
>>> r = a.reporter
>>> r.full_name
'John Smith'
# 反之亦然:Reporter 对象也可以访问到与其关联的 Article 对象。
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>
# 这个 API 接受你所需的查询条件,并在后台高效地执行 JOIN 数据库操作。
# 这个操作会查找所有以 "John" 开头的记者发表的文章。
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>
# 通过变更对象的属性值来修改对象,然后调用save()存入数据库。
>>> r.full_name = 'Billy Goat'
>>> r.save()
# 用 delete() 来删除一个对象。
>>> r.delete()

四、动态生成的管理页面:并非徒有其表

当你的模型完成定义,Django就会自动生成一个专业的生产级的管理页面,一个可用让已认证用户进行添加,更改和删除对象的Web站点,那你只需要简单的在admin站点注册你的模型即可。

# mysite/news/models.py
from django.db import models
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
# mysite/news/admin.py
from django.contrib import admin
from . import models
admin.site.register(models.Article)

这样设计所遵循的理念是,站点编辑人员可以是你的员工,你的客户,或者就是你自己--而你大概不会乐意费半天劲创建一个只有内容管理工具的后台管理界面。

创建Django应用的典型流程是:先建立数据模型,然女孩搭建管理站点,尽可能快的跑起来。那样你的团队(或者客户)就可以向你的网站里填充数据了。

一、初识 Django的更多相关文章

  1. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

  2. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  3. web框架之初识Django

    目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...

  4. Django学习手册 - 初识django

    初识: django简介: 开放源代码的web应用框架 由python语言编写的. 一.框架基本概念(核心): 以上这个图就是 django 的核心逻辑图,必须熟记.后续的所有编程都跟这个图的逻辑息息 ...

  5. 巨蟒python全栈开发django2:初识django

    今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...

  6. 初识Django之前端后端与数据库的配置

    目录 一.静态文件配置 二.关于form表单的补充 三.post请求出现403问题 四.request方法初识 4.1判断当前请求方式 4.2request.POST与request.GET 五.py ...

  7. 初识django

    一 从下面开始 所有的的web应用其实就是就是一个socket服务器,浏览器是一个web客户端. import socket def handle_request(client): buf = cli ...

  8. python——初识django的template

    这周听了老师讲关于django的框架问题,第一次比较透彻的了解了mtv框架.也是第一次接触模板的概念,研究了一下,现在就记录下来好嘞... 首先要介绍一点关于django的模板:我们为什么要使用模板呢 ...

  9. 初识DJango——MTV模型

    一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...

  10. 初识DJango——Web框架

    一.Web框架 HTTP特点 1.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同. 由于HTTP协议简单 ...

随机推荐

  1. SublimeLinter插件对PHP语法检测不起作用的解决办法

    系统:windows7+sublime3 1.安装sublimelinter ctrl+shift+p=>pi=>回车=>sublimelinter=>回车 2.安装好后进行配 ...

  2. Observer(观察者)模式

    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是 ...

  3. Notes 20180309 : String第一讲_char的可读序列

    实际上在写本文之前,我曾考虑是先探讨面向对象,还是先选择String和Arrays,最后还是选择了后者,并非是面向对象对我们不重要,相反它是Java的灵魂所在,之所以这样的安排是因为这两个是在是我们程 ...

  4. 【腾讯敏捷转型No.7】QQ邮箱如何通过敏捷成为行业第一

    前几篇文章讲到2006年的腾讯是如何开始敏捷转型的,接下来这篇文章,我将向大家讲述,腾讯开始敏捷转型之后,QQ邮箱是如何通过敏捷成为行业第一. 众所周知,张小龙是“微信之父”,对他熟悉的人,应该也知道 ...

  5. 修改系统UITableViewCell的ImageView大小

    代码如下: CGSize itemSize = CGSizeMake(, ); UIGraphicsBeginImageContext(itemSize); CGRect imageRect = CG ...

  6. 【PTA 天梯赛】L1-046 整除光棍(除法模拟)

    这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整除. 现在,你的程序 ...

  7. Linux系统Java环境配置

    1.卸载Linux系统自带的JDK java -version rpm -qa | grep -i java 我们要删除掉自带的JDK环境 rpm -e --nodeps java-1.6.0-ope ...

  8. 解决 Cydia 源显示空白的问题

    打开 Cydia 所有源都显示空白,没有任何插件,已安装的列表也显示空白,解决方法是下载 var.lib_tar 包 下载链接: https://pan.baidu.com/s/1jzJ8KehoBo ...

  9. Mysql only_full_group_by 引起的错误

    SQLSTATE[]: Syntax error or access violation: Expression # of SELECT list is not in GROUP BY clause ...

  10. Delphi XE7调用Java Class,JAR

    Delphi XE5,XE6需要用户手工编译并将Classes.Dex加入到包中,不过Delphi XE7可以省掉这些工作了. 如何在XE7中调用Java,具体步骤如下: 1.将jar文件添加到XE7 ...