码迷,mamicode.com
首页 > 其他好文 > 详细

Django 1.9.6 官方文档 第二部分(中文翻译)

时间:2016-05-13 14:11:18      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

  注:最近开始学习Python的Django框架,为了督促学习,强迫自己翻译官方的文档,既是一种学习,也是一种积累!由于经验不足,错误肯定不少,请大家不吝指教!原创内容,转载请注明出处。

 

Django官方文档

第二部分:新手入门

(之所以从第二部分开始,是因为第一部分是整个官方文档结构图和导引,有空我会翻译出来补全。)

2.1 Django概述

  Django诞生于快节奏的新闻编辑室环境,它被设计成快速、简单的通用网站开发工具。

  本文档的目的是让你获得足够的基础知识去理解Django是如何工作的,它既是一本教程也可以当做参考资料。当你准备好开始一个项目,你可以从教程开始也可以直接进入更详细的文档。

2.1.1模型设计

  你可以在没有数据库的情况下使用Django。

  数据模型语法提供多种方式表示你的模型。这里有一个简短的示例:

mysite/news/models.py
from django.db import models

class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    def __str__(self):              # __unicode__ on Python 2
        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, on_delete=models.CASCADE)

    def __str__(self):              # __unicode__ on Python 2
        return self.headline

2.1.2安装

  可以通过运行Django命令行程序自动地创建数据库表:

  $ Python manage.py migrate

2.1.3开放的API

         你可以利用大量的开放的Python API访问数据。这些API创建迅速,不需要生成额外的代码。下面是示例:

 

#从我们创建的"news"应用中导入模块

>>> from news.models import Reporter, Article

 

# 暂时还没有reporters在系统中

>>> Reporter.objects.all()

[]

 

#创建一个新的Reporter.

>>> r = Reporter(full_name=‘John Smith‘)

 

#将对象存入数据库。你必须显式地调用save方法。

>>> r.save()

 

# 现在它有了ID。

>>> r.id

 

#新的reporter存在于数据库

>>> Reporter.objects.all()

[<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.

 

# 创建一个article

>>> from datetime import date

>>> a = Article(pub_date=date.today(), headline=‘Django is cool‘,

... content=‘Yeah.‘, reporter=r)

>>> a.save()

 

# article存在于数据库

>>> Article.objects.all()

[<Article: Django is cool>]

 

>>> r = a.reporter

>>> r.full_name

‘John Smith‘

 

>>> r.article_set.all()

[<Article: Django is cool>]

 

>>> Article.objects.filter(reporter__full_name__startswith=‘John‘)

[<Article: Django is cool>]

 

#通过变更对象的属性修改对象,记得调用save方法。

>>> r.full_name = ‘Billy Goat‘

>>> r.save()

 

# 使用delete()方法删除对象

>>> r.delete()

2.1.4 功能齐全的管理界面

  一旦你的模型定义好了,Django会自动地创建一个专业的现成的管理界面。它实际上是一个web页面,让那些被授权的用户可以增加、改变和删除对象。

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)

2.1.5设计你的 URLs

  一个干净、优雅的URL方案是高质量WEB应用的重要部分。Django鼓励漂亮的URLs设计,不要把那些令人讨厌的.php或.asp放进URL。

  为app设计URLs实际上是创建一个URLconf的Python模块。它是你的app的目录表,它包含一个简单的在URL模式和Python回调函数之间的映射。URLconfs有助于解耦URLs和Python代码。

  下面是一个URLconf的例子,它用于上面那个Reporter/Article范例:

mysite/news/urls.py


from django.conf.urls import url

from . import views

urlpatterns = [
    url(r^articles/([0-9]{4})/$, views.year_archive),
    url(r^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive),
    url(r^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$, views.article_detail),
]

  上面的代码中,通过简单的正则表达式将URLs与具体的Python回调函数(views)联系起来。正则表达式通过括号从URL中获取值。当用户请求一个页面时,Django按顺序遍历每一个匹配模式,并在第一个匹配的的地方停止。(如果没有任何匹配项,Django将返回404页面)。这个过程非常快,因为正则表达式在加载时就会被编译。

  一旦成功匹配,Django将导入和调用给定的视图(view),一个简单的Python函数。每一个view传递一个请求对象,它包含了请求的元数据和正则表达式中捕获的值。例如,当用户请求“/articles/2005/05/39323/”这个页面,Django将调用函数news.views.article_detail(request, ’2005’, ’05’, ’39323’)

2.1.6编辑视图

  每个视图都至少返回一个HttpResponse对象,它包含了被请求的页面的内容,或者触发一个异常,比如Http404。其余的功能则有你自己决定。

通常,视图通过参数获取数据,并用它渲染加载的模板。下面是一个year_archive的视图例子:

mysite/news/views.py


from django.shortcuts import render

from .models import Article

def 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的模板系统,它有许多强大的功能,并力图保持简单易用的特点。

2.1.7设计你的模板

  上面的代码加载了news/year_archive.html模板。

  Django有一个模板查找路径,它允许你减小模板冗余。在Django设置中,你可以创建模板的目录列表,Django将在列表中按顺序查找模板。

下面是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标题栏的值。圆点不但用于查找属性,也用于字典键值、索引的查找和函数调用。请注意,在{{ article.pub_date|date:"F j, Y" }}中使用了Unix系统风格的管道符号“|”。你可以连接任何个数的管道。你可以编写自定义的模板管道,可以编写自定义的模板标签,运行自定义的后端Python代码。

  最后,Django使用“模板继承”的概念,就像{% extends "base.html" %}所做一样。它的意思是先加载名为“base”的模板。这个模板已经预定义了大量的块,并且这些块中还嵌套了块。总之,这帮助让你大量的减少模板的数量,每个模板只专注于它独一无二的部分。

  下面是“base.html”的代码。

mysite/templates/base.html


{% load staticfiles %}
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <img src="{% static "images/sitelogo.png" %}" alt="Logo" />
    {% block content %}{% endblock %}
</body>
</html>

  它只是单纯的定义了站点的基本“外观”,并提供子模板填充的“入口”。这让重新设计一个站点变得简单,你只需要更改基础模板这一个文件。

  注意,你也可以使用别的模板系统,虽然Django的模板系统和它的模型层整合得很好,但也没有强迫你非用它不可。同样的,你也不是非用Django的数据库API不可。你可以使用别的数据库抽象层,你可以读取XML文件,任何你想要的。Django的每一个部件,例如模型、视图和模板都是松耦合的。

2.2快速安装向导

  在使用Django之前,我们必须先安装它。光放有完整的安装向导,包含了所有可能的状况。

2.2.1安装Python

  作为一个基于Python的WEB框架,Django需要预先安装Python。你可以从Python的官网或操作系统的软件管理器下载并安装最新版本的Python。另外,想了解哪个版本的Python支持Django,请看文档《What Python version can I use with Django?》。Python内置一个名为SQLite的轻量级数据库,所以你这时还可以不安装数据库程序。如果你使用的是Jython(Python的Java平台实现),你需要一些额外的步骤。

  在shell中输入Python,如果显示如下信息,证明已经成功安装Python:

Python 3.4.x

[GCC 4.x] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> 

2.2.2安装数据库

  如果你想工作在“大型”的数据库引擎下,例如PostgreSQL, MySQL, 或者 Oracle,请查看文档《database installation information》

2.2.3移除旧版本的Django

  在安装新版本的Django之前,你需要先卸载旧的版本。

2.2.4安装Django

  在安装Django时你有三种选择:

  •通过操作系统的软件管理工具安装jango,这是最快的方法。

  •安装官方发行版。对大多数使用者而言这是最好的选择。

  •安装最新的开发版。这适用于那些喜欢使用最新最全的功能,并且不担心代码风险的人。在开发版中,你有可能碰到新的bug,请将它上报,帮助Django的发展。

2.2.5验证

  在Python的shell环境中,import Django模块,如下所示:

  >>> import django

  >>> print(django.get_version())

  1.9

 

待续.........

Django 1.9.6 官方文档 第二部分(中文翻译)

标签:

原文地址:http://www.cnblogs.com/feixuelove1009/p/5487772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!