Django概览

因为Django是在一个快节奏新闻工作环境中被开发出来的,所以它设计成一个能快速简易完成大部分网页共通的功能的框架。接下来的一些信息将会带你用Django制作一个基于数据库的网页应用。
这个文档的目的是给你看部分Django技术上的细节来帮助你理解Django是如何工作的,这并不是一个教程,也不是技术参考文档。当你准备好开始制作一个项目的时候,你可以选择教程(start with the tutorial)或者参考更多细节文档(dive right into more detailed documentation)。

设计你的模型(models)

尽管你没有数据库,你一样可以愉悦的使用Django,Django拥有一个关系映射器(object-relational mapper),你可以通过Python代码来描述你的数据库。
数据模型语法(data-model syntax)提供了丰富的用来表示你的模型的方法,它已经被用于解决数据库构架问题很多年了。如下是一个简单的例子:
mysite/news/models.py
from django.db import modelsclass Reporter(models.Model):full_name = models.CharField(max_length=70)def __str__(self):return self.full_nameclass Article(models.Model):pub_date = models.DateField()headline = models.CharField(max_length=200)content = models.TextField()reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)def __str__(self):return self.headline




安装它


接下来,启用Django命令行来自动创建数据库表格

$ python manage.py migrate

migrate命令将会查看你都所有可用的模型,并在数据库中为那些没有表格的模型创建表格,同时提供你更丰富的模型控制(much
richer schema control)。



享受这些不受约束的API


有了这个,你就拥有了不受约束的、丰富的DjangoPython API来访问你都数据库。API是即时创建的,不需要代码生成:

#导入我们给“nwes”APP创建的模型
>>> from news.models import Reporter, Article
#这时,系统中还没有“记者”
>>> Reporter.objects.all()
<QuerySet []>

#创建一个新的“记者”
>>> 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提供了丰富的数据库查看接口
>>> 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.

#新建一篇“文章”
>>> 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>]
#“文章”对象可以通过接口查看“记者”对象
>>> r = a.reporter
>>> r.full_name
'John Smith'
#反过来同样,可以通过“记者”对象查看“文章对象”
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]
#API接口可以根据需要按照关系高效率地执行#JOINs for you behind the scens(这句实在不会翻译了。。。)#如下将会返回所有以“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就会自动创建一个专业的几乎成形的管理界面(administrative interface)——一个可以让经过认证的用户添加、更改、删除对象的网站。这与在管理站点注册模型一样简单。



mysite/news/models.py
from django.db import modelsclass 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 adminfrom . import modelsadmin.site.register(models.Article)

这玩意儿存在的意义就是当你的网站是给你的员工、客户,或者你自己编辑的时候,你又不想浪费时间去再为管理后台目录内容创建一个界面。
开发Django apps的一个经典套路就是你设计好模型并以最快的速度启动管理站点,然后你就可以交给员工(或是客户)来上传数据。然后将开发数据的方法设计为public(编者暂时无法理解最后一句话,暂时理解为尽快将数据操作接口做出来)

设计网址(URL)

在高质量的网页应用开发中,一个优雅的URL组合是非常重要的细节。Django鼓励设计好看的URL,不要把那些什么.php、.asp讨厌的字符加到URL里边!=3=
要为应用设计URL,你需要创建一个Python模型叫做URLconf。这是应用内容的表格,它包含了URL模式和Python回掉函数之间的简单映射。URLconf也用于从Python代码中分离URL。
如下是一个为Reporter/Article例子创建的URLconf模型:
mysite/news/urls.py
from django.urls import pathfrom . import viewsurlpatterns = [path('articles/<int:year>/', views.year_archive),path('articles/<int:year>/<int:month>/', views.month_archive),path('articles/<int:year>/<int:month>/<int:pk>/', views.article_detail),
]

上面的代码将URL路径设置到Python回到函数("views")。路径字符串用参数值标签来获取URL中的值。当一个用户请求一个页面时,Django一次遍历每个路径,并在第一个匹配URL的地方停下。(如果没有匹配的URL,Django将会调用404视图=。=)路径加载时会被编译成正则表达式,所以这个过程就跟开火箭似的。

一旦找到一个匹配的URL,Django将会调用指定的视图,一个Python函数。每个视图都会传递一个包含请求元数据以及模式中获取的值的请求对象。
举个例子:如果我们请求URL"/articles/2005/05/39323/",Django会调用函数Django news.views.article_detail(request, year = 2005, month = 5,pk = 39323)

编写你的视图(views)

每个视图都要执行如下两项操作中的一项:返回包含请求页面内容的HttpResponse对象;或者引发异常(如Http404),其余的由你决定。
按照国际惯例,视图会根据参数检索数据,加载检索来的数据来呈现模板(template)。下边是一个Djangoyear_archive示例:
mysite/news/views.py
from django.shortcuts import renderfrom .models import Articledef year_archive(request, year):a_list = Article.objects.filter(pub_date__year=year)context = {'year': year, 'article_list': a_list}return render(request, 'news/year_archive.html', context)

这个示例用到了Django的模板系统(template system),这个系统有多个强大的功能,同时它也在努力做到让不是码农的人也能用他。

设计你的模板(templates)

上边的代码加载了 news/year_archive.html 模板。
Django拥有一个模板搜索路径,可以让模板间的冗余最小化。在Django的设置(settings)中,你可以指定一个目录列表通过DIRS来检查模板。如果第一个目录中没有要检索的模板,就会转到第二个目录,以此类推。
假设已经找到news/year_archive.html模板。如下是模板的样式:
mysite/news/templates/news/year_archive.html
{% extends "base.html" %}{% block title %}Articles for {{ year }}{% endblock %}{% block content %}
<h1>Articles for {{ year }}</h1>{% for article in article_list %}<p>{{ article.headline }}</p><p>By {{ article.reporter.full_name }}</p><p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}

双花括号中的是变量。{{ article.headline }}意思是“输出文章标题属性的值”。但点不仅用于属性查找,也可以用作字典键查找,索引查找和函数调用。
注意{{ article.pub_date|date:"F j, Y" }} 用了Unix风格的“通道”(“|”字符)。这叫模板过滤器,它可以用来过滤变量值。在这个示例中,日期过滤器以给定的格式来格式化Python日期时间对象(如同PHP的日期函数)。
你可以链接无数个过滤器。你可以编写自定义模板过滤器(custom template filters)。你可以自己编写在后台运行Python代码的自定义模板标签(custom template tags)。
最后,Django使用了“集成模板”这一概念。即{% extends"base.html" %},意思是“先加载名为‘base’的模板,它已经定义了一堆块,用下面的块来填充块。”简单来说,这可以大大减少模板中的冗余:每个模板只需要定义这个模板与其他模板都不一样的、唯一的内容。
以下是包含了静态文件(static files)的“base.html”模板:
mysite/templates/base.html
{% load static %}
<html>
<head><title>{% block title %}{% endblock %}</title>
</head>
<body><img src="{% static "images/sitelogo.png" %}" alt="Logo" />{% block content %}{% endblock %}
</body>
</html>

简单来说,这个模板定义了网址的外观(带有站点标识),并且为子模版的填充提供了“洞”(或者是是路径)。这让设计新网站变得十分简单,你甚至只需要更改一个文件--基础模板。
你也可以重复利用相同的子模版,基于不同的基础模板来打造多种多样版本的网站。Django的创造者用这种技术搞了很多不同移动版的网站,而他仅仅创建了一个新的基础模板。
不过讲道理,如果你喜欢其他的系统,你也不是非要用Django的模板系统=3=。尽管Django的模板系统和Django的模型层结合的非常好,但是没人逼你用=3=。同样的,你也不是非要用Django的数据库接口,你可以用其他的数据库抽象层,你可以从磁盘读取文件,你可以读取XML文件,你可以做很多你想做的事情( ̄▽ ̄* )ゞ。每一个Django模型、视图、模板都与下一个耦合。

这些只是冰山一角

这仅仅是Django功能的简短概览。如下有一些很有用的功能:
  • 与mecached或其他后端集成的缓存框架(caching framework)。
  • 一个让创建RSS、Atom和编写Python类一样简单的联合框架(syndication framework)
  • 更生动的自动生成管理功能,上边这个概述只是提到了一些表面功能。

接下来,你可以去下载Django,阅读教程(the tutorial),或者加入社区。

感谢你的支持!

Django2.0官方文档--概览相关推荐

  1. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)

    Hyperledger Fabric 2.0 官方文档中文版第6章 教程上 总目录 6.教程(上) 将智能合约部署到通道 启动网络 Logspout设置 打包智能合约 安装链码包 批准链码定义 将链码 ...

  2. SWFObject 2.0官方文档

    SWFObject 2.0官方文档 2008年4月24日 翻译:farthinker 主要内容: 1 . 什么是SWFObject 2.0? 2 . 为什么你应该使用SWFObject 2.0? 3 ...

  3. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(下)

    Hyperledger Fabric 2.0 官方文档中文版 第6章 教程下 总目录 6.教程(下) 使用CouchDB 为什么使用CouchDB? 在Hyperledger Fabric中启用Cou ...

  4. Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念

    Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念 总目录 3.关键概念 引言 什么是区块链? 区块链为什么有用? 什么是Hyperledger Fabric? Hyper ...

  5. Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序

    Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序 总目录 5.开发应用程序 情景 PaperNet网络 介绍参与者 分析 商业票据生命周期 交易 账本 过程和数据设计 ...

  6. CUDA10.0官方文档的翻译与学习之编程接口

    目录 背景 用nvcc编译 编译工作流 二进制适配性 ptx适配性 应用适配性 C/C++适配性 64位适配性 cuda c运行时 初始化 设备内存 共享内存 页锁主机内存 可移植内存 写合并内存 映 ...

  7. Hyperledger Fabric 2.0 官方文档中文版 第1章 引言

    Hyperledger Fabric 2.0 官方文档中文版 第1章 引言 总目录 1.引言 Hyperledger Fabric 模块化 许可区块链与无许可区块链 智能合约 新途径 隐私和保密 可插 ...

  8. Spring Boot 2.0官方文档之 Actuator

    https://blog.csdn.net/alinyua/article/details/80009435 前言:本文翻译自Spring Boot 2.0.1.RELEASE官方文档,该Spring ...

  9. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

最新文章

  1. POJ1386 Play on Words
  2. cpc卡内计费信息异常包括_抖音信息流落地页直达广告怎么做?
  3. 谷歌开源框架 FUSS,让声音分离不再成为难题
  4. 学会python之后-【一点资讯】学会Python后,人生简直开挂了!
  5. DzzOffice1.0 Beta2发布
  6. Android之ProgressBar读取文件进度解析
  7. ElementUI中el-upload传递额外参数为date类型时后台SpringBoot接收不到
  8. 设计模式——工厂模式(一)
  9. Eric Brewer大神
  10. 千呼万唤始出来,OpenCV 4.0正式发布!
  11. AS3的一些压缩解压缩类库(AS3 ZIP、AS3 GZIP等等)
  12. python反转一个三位数_反转Python整数的位
  13. Excel 2013 基础视频教程上线了
  14. 任意图像转素描:Python分分钟实现
  15. 从0基础学习Python(17)[面向对象三大特征[多态]]
  16. AtoZ CSS快速提示:对文本使用OpenType
  17. 源代码管理工具——VSS详解
  18. Postfix邮箱部署
  19. (Note)夜光藻赤潮
  20. 8:操作模式1-boot mode

热门文章

  1. linux下流量监控统计软件,Linux服务器网卡流量统计监控软件vnStat
  2. 模型转换、模型压缩、模型加速工具汇总
  3. 【数字IC快速入门】linux基本操作
  4. 易语言获取指定文本模块封装源码
  5. 在Ubuntu 9.10中DIY谷歌Chrome OS
  6. 企业服务器采用虚拟化技术的利弊
  7. 【Unity技术积累】实现鼠标画线功能 LineRenderer
  8. android huawei ale-tl00 不显示log,华为手机ALE_TL00为什么插卡不显示
  9. PyQt5快速入门教程3-QtDesigner设计第一个界面
  10. 计算机语言安装不上,安装程序包的语言不受系统支持,详细教您如何解决Office2010安装时语言不受系统支持...