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

  注:最近开始学习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

待续.........

时间: 2024-11-07 14:30:39

Django 1.9.6 官方文档 第二部分(中文翻译)的相关文章

Django QuestSet API (官方文档)

1.返回新查询集的方法 (1)filter():滤指定条件的结果 Entry.objects.filter(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')SQL语句: SELECT ... WHERE (pub_date > '2005-1-3' AND headline = 'Hello') (2)exclude():排除指定条件的结果 Entry.objects.exclude(pub_date__gt=datetime.d

Django——render() 转自官方文档

快捷函数  render( 请求, 模板, 内容) 载入模板,填充上下文,再返回它生成的HttpResponse对象 此时就不需要再导入 loader和HttpResponse 1 from django.shortcuts import render 2 3 from .models import Question 4 5 6 def index(request): 7 latest_question_list = Question.objects.order_by('-pub_date')[

Django1.7官方文档中的tutorial——翻译

写下你的第一个Django应用,第一部分 让我们通过例子来学习. 通过这篇指南,我们将会带你浏览一遍一个基本投票应用的创建. 它由两部分组成: 1一个让人们查看投票和进行投票的公共站点 2一个让你添加,改变和删除投票的管理站点 我们假设你已经安装了Django.你可以检查Django是否被安装以及是哪个版本的通过运行下列命令: python -c “import django; print(django.get_version())” 如果Django被安装了,你应该会看到你安装的版本,否则,你

Spring Boot 官方文档入门及使用

个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念,请先移步上一篇文章 Spring Boot 学习.本篇原本是为了深入了解下Spring Boot而出现的. 另外,Spring Boot 仍然是基于Spring的,建议在赶完工之后深入学习下Spring,有兴趣可以看看我的 Spring 4 官方文档学习(十一)Web MVC 框架 .欢迎探讨,笑~

OpenGL ES着色器语言之着色概览(官方文档)

OpenGL ES着色器语言之着色概览(官方文档第二章) 事实上,OpenGL ES着色语言是两种紧密关联的语言.这些语言用来在OpenGL ES处理管线的可编程处理器创建着色器. 在本文档中,除非另外说明,一个语言功能适用于所有语言,并且通用用法将把他们当做一个语言来看待.特定语言将指出它们的目标处理器:顶点(vertext)或片元(fragment). 任何被着色器使用的OpenGL ES状态值都会自动地被跟踪并且作用于着色器上.这个自动状态跟踪机制允许应用程序为状态管理而使用OpenGL

自己翻译 delegation 官方文档

什么是代理,知道怎么用,见过N次.会用代理传值,还不够.代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺 代理: 代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要和另一个类协调的时候.委托对象(委托方)会持有代理对象(代理方)的一个引用,并在合适的时机给代理方发送一个消息.这个消息通知代理方,委托方将要处理一个件事或者刚处理完一件事.代理方可能会对这个消息做出相应,如更新自己或者其他类的界面或状态,并且在一些情况下,代理方可以返回一个值,来影响一个即将被处理

Django官方文档学习

Django 1.10官方文档:https://docs.djangoproject.com/en/1.10/intro/tutorial01/ 1.查看django版本 python -m django --version 2.创建项目 django-admin startproject mysite 3.调试工程 python manage.py runserver [8080/0.0.0.0:8000] 4.创建APP python manage.py startapp polls 5.编

Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正)

Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正) 置顶 2017年12月08日 11:19:11 阅读数:20277 官方原文: https://docs.djangoproject.com/en/2.0/ 当前翻译版本: v2.0 Python版本要求: v3.4+ (译者注:本人目前在南京一家互联网公司工作,职位是测试开发工程师.因为测试工作中经常会用到编码语言,如Python.Java.Shell等,所以几年前萌生了对Python语法的学习.Django作为Python

Jinja2学习笔记暨官方文档的翻译

http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好.  模板引擎竟然可以做的如此灵活....真是不错.... 下面直接把看文档过程的笔记发布出来, 呵呵, 基本上就是翻译, 加了不多的一点自己的解释......希望可以帮到大家 补充: 1. 在模板中设置自定义变量: {% set variable_name = value %} 比如设置{% set u