Django 简介
一、Django背景
Django 是使用 Python 开发的开源 Web 开发框架。使用 Django,你能以最小的代价构建和维护高质量的 Web 应用。
1.1 为什么使用 Django
-
Django 诞生于新闻网站的环境中,它所提供的特性非常适合开发内容类的网站(例如:博客,交流社区,图片分享站等等)。因为 Django 是在快节奏的新闻编辑环境中开发的,它的设计目的是使常见的 Web 开发任务变得快速而简单。
-
Django 是开源的,有个活跃的社区。它不是商业项目或者科研项目,而是集中力量解决 Web 开发中所遇到的一系列问题。因此,Django 每天都在现有的基础上进步,以适应不断更迭的开发需求。这样即节省了开发时间,也提高了后期维护的效率。
1.2 使用 Django 开发的网站
1.3 源码下载
curl -O http://labfile.oss.aliyuncs.com/courses/1127/mysite.zip
二、Django 概览
接下来我们从实例入手,一步一步解析 Django 建立网站的过程,我们分 3 个Python 文件(models.py
,ur1s.py
,views.py
)和 HTML 模板文件(template. html
)来讲解。
2.1 设计模型Model
Django 无需数据库就可以使用,通过对象关系映射器(Object-relational mapping,ORM),仅使用 Python 代码就可以描述数据结构。
# myProject/myApp/models.py
from django.db import models
class book(models.Model):
name = models.CharField(max_length=100)
pub_date = models.DateField()
models.py
文件主要用一个 Python 类来描述数据表。称为模型(model)。运用这个类,你可以通过简单的 Python 代码来创建、检索、更新、删除数据库中的记录而无需写一条又一条的 SQL 语句。在这里我们创建了一个 book 模型, 并定义了 name 和 pub_ date 属性。
2.2 设计视图 Views
在模型被定义之后,我们便可以在视图中引用模型。通常,视图根据参数检索数据,加载一个模板,并使用检索到的数据呈现在模板上。
# myProject/myApp/vicws.py
from django.shortouts import render
from .models import Person
def book_ archive(request, year):
book-list = Person.objects.filter(birth_year = year)
context = {'year': year, 'book_list': book_list}
return render(request, 'books/year_archive.html)
views.py
文件包含了页面的业务逻辑。book_ archive() 函数叫做视图。这里还用到了 year_archive.html
模板。
2.3 设计链接 Urls
优雅简洁的 URL 解析式是衡量高品质网站的重要标准。Django 鼓励使用漂亮的 URL 设计。使用这些优美的 URL ,只需要建立 URL 和 Python 回调函数简单的映射关系即可。
# myProject/myApp/urls.py
from django.urls import path
from . import views
urlpatterns = [path('books/<int:year>', views.year_archive),]
urls.py
指出了什么样的 URL 调用什么视图。 在这个例子中 books/xxxxx 将会调用 year_archive() 这个函数。也就是说,在进入这个链接时,会返回视图函数的结果。
2.4 设计模板 Templates
Django 拥有强大的模板功能,使用该模板能设计出强大的 Web 页面。
# /template/year_archive.html
{% block title %}Books for {{ year }}{% endblock %}
{{% block content %}}
<h1>Articles for {{years}}</h1>
{% for book in book_list %}
<p>{{ book.name }}</p>
<p>Published {{ book.pub_date|date:"F j, Y" }}</P>
{% endfor %}
{% end block %}
year_archive.html
是 html 模板。使用带基本逻辑声明的模板语言,如 {% for book in book_list %}
,它会将函数返回的结果显示在网页上。
Django 的这种结构我们称之为 MTV 模式:M 代表模型(Model),T 代表模板(Template),V 代表视图(View)。这三个分别代表了三种不同功能的 Web 应用,各司其职,又彼此合作。 大家一定听说过 MVC 模式(Mode-View-Controller),MTV 模式本质上与 MVC 相同,都是让各组件保持低耦合的关系。