`
剑事
  • 浏览: 63140 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Django 1.0 中文文档 ----- 第一步

阅读更多

 

从头开始

 

概要

 

Django 初探

     由于django是在新闻编辑应用中快速发展起来的,所以他被设计的很适合web快速简易开发。这是个简单的概要,介绍如何通过Django编写web应用程序的数据库驱动。

 

     这篇文档的目的是给予你足够的技术细节来理解Django是如何工作的,
但是这并不打算替代辅导资料(tutorial)和参考文档(reference),因为这两个都有了。当你准备开始一个项目,你可以从辅导资料开始或去看更多的文档细节

 

设计你的模型

 

     当然你可以在使用django的时候不使用数据库,你可以用python代码描述数据库格局,绘制对象关系。
     数据模型语法提供许多方法来描绘你的模型,到目前为止已经是应用了两年的数据库方案。
下面是一个例子

 

 

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

    def __unicode__(self):
        return self.full_name

class Article(models.Model):
    pub_date = models.DateTimeField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter)

    def __unicode__(self):
        return self.headline

 

 

安装


接下来,运行Django 命令行工具自动创建数据库表

manage.py syncdb

 

 

syncdb 命令会检查你所有可用的模型并创建目前数据库中还没有创建的表

 

享用免费的API


这样你已经获得了免费丰富的Python API存取你的数据,API 已经被快速建立,不需要在额外写代码

>>> from mysite.models import Reporter, Article

# No reporters are in the system yet.
>>> Reporter.objects.all()
[]

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
[<Reporter: John Smith>]

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

# Django provides a rich database lookup 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.

# Create an article.
>>> from datetime import datetime
>>> a = Article(pub_date=datetime.now(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# Now the article is in the database.
>>> Article.objects.all()
[<Article: Django is cool>]

# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
[<Article: Django is cool>]

# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith="John")
[<Article: Django is cool>]

# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()

# Delete an object with delete().
>>> r.delete()



 

 

 一个动态的管理接口:它不是一个脚手架,而是一个完整的建筑

 

只要你定义好模型,django就能自动创建专业的完备的管理接口,一个让认证的用户修改和删除对象,将你定义的模型注册到管理系统非常简单。

 

# In models.py...




from django.db import models

class Article(models.Model):

    pub_date = models.DateTimeField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter)



# In admin.py in the same directory...


import models

from django.contrib import admin

admin.site.register(models.Article)

 

这个观念就是 你的网站可以让工作人员,客户或你自己管理,而你不需要去创建后台接口,只是管理内容。

创建django应用的一个典型流程是,建立模型,开启管理系统,因此你的工作人员或客户可以先着手数据,然后将当前数据发布

 

 

 

设计你的 URLS

 

整齐,简介的URL方案在高质量的网络应用程序中是一个很重要的细节。django赞成设计漂亮的URL并且不使用后缀,像.php或.asp

 

 

 为应用程序设计URLs,你创建一个Python模块URLconf,一个内容的目录,包含简单的URL规则和返回函数之间的映射,

URLconfs将URLs和python代码解耦。

这是个url为上面Reporter/Article例子的配置

 

 

 

 

from django.conf.urls.defaults import *




urlpatterns = patterns('',

    (r'^articles/(\d)/$', 'mysite.views.year_archive'),

    (r'^articles/(\d)/(\d)/$', 'mysite.views.month_archive'),

    (r'^articles/(\d)/(\d)/(\d+)/$', 'mysite.views.article_detail'),

)

 

上面的代码以正则表达式的方式映射URLs到目标返回函数(视图)。

正则表达式用括号捕获URL上的数值,当用户请求一个页面,django遍历每个方式,按次序并停止在第一个匹配的请求URL,

(如果没有匹配,Django会调用404视图显示),这个速度是显著的,因为正则表达式在程序装载的时候编译。

 

只要一个正则匹配,django就会输入并调用给定的视图,一个简单的python函数。每个视图会传递一个request对象,包含请求的元数据。

和URL 上捕获的数据

例如,如果用户请求URL"/articles/2005/05/39323/", DJANGg会调用函数mysite.views.article_detail(request, '2005', '05', '39323').

 

 

 

编写你的视图

 

每个视图会回应两种情况中的一个,返回一个HttpResponse 对象包括请求的内容,或报异常想Http404.

通常,一个视图根据参数接受数据,加载一个末班并用数据渲染模板,这是一个year_archive视图的例子

 

def year_archive(request, year):

    a_list = Article.objects.filter(pub_date__year=year)

    return render_to_response('news/year_archive.html', {'year': year, 'article_list': a_list})

 

 

这个例子用到里django的模板系统,是个有些强大的功能但是力求简单可以让非程序员使用。

 

 

设计你的模板

 

上面的程序会加载这个 news/year_archive.html 模板.

 

django有一个模板路径,让你缩小范围。在你的django配置里,你可以指定一个模板的目录列表。

如果模板不存在第一个目录里,会继续检查第二个目录,以此类推。

 

让我们说下 news/article_detail.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日期对象被格式化为
给定的日期格式(像php里的日期函数;确实在PHP里是个好方法)

你喜欢的话可以把好多个过滤器连接起来用,你可以自定义过滤器,写自己的模板标记,在这里
运行自己的python程序代码

最后,django使用 {% extends "base.html" %} 模板继承的构想,就是首先加载名字为base的模板,
base模板里定义好一连串的块(block),之后的块会填充到这个块,总之,那会让我们去掉模板多余的部分
每个模板只需要定义自己唯一的部分

下面是这个base.html模板

<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <img src="sitelogo.gif" alt="Logo" />
    {% block content %}{% endblock %}
</body>
</html>

 

 

5
1
分享到:
评论

相关推荐

    django1.0文档

    这个“django1.0文档”是官方提供的详尽指南,包含了关于 Django 1.0 的所有核心概念、功能和最佳实践,对于开发者来说是一份非常宝贵的资源。 **Django 框架基础** 1. **模型(Models)**: Django 的核心之一是它...

    Django 1.0 中文文档.doc

    《Django 1.0 中文文档》是一个详尽的指南,主要针对初学者,旨在帮助读者快速掌握Django框架的基础知识。在这个文档中,首先介绍了如何编写你的第一个Django程序,通过创建一个简单的投票应用来引导学习者逐步了解...

    PyPI 官网下载 | django-tables2-column-shifter-0.3.0.tar.gz

    今天我们要讨论的是其中的一个特定包——`django-tables2-column-shifter`,其版本为0.3.0,它是一个与Django框架紧密相关的工具,主要用于处理数据表的列移动功能。 Django是用Python编写的一个开源Web应用框架,...

    Python库 | django_admin_multilang-1.0-py3-none-any.whl

    标题"Python库 | django_admin_multilang-1.0-py3-none-any.whl"提到了一个Python库,名为`django_admin_multilang`,版本为1.0,它是一个适用于Python 3的软件包。`.whl`文件是一种预编译的Python轮子(wheel)包...

    django-python3-ldap, python 3的Django LDAP用户身份验证后端.zip

    django-python3-ldap, python 3的Django LDAP用户身份验证后端 django-python3-ldapdjango-python3-ldap 为 python 2和 3提供了一个 Django LDAP用户身份验证后端。特性使用LDAP服务器验证用户身份。将LDAP用户与...

    高效易用Django流程引擎源码 - django-lb-workflow

    项目概述:django-lb-workflow 是一个基于Python的高效易用Django流程引擎源码,旨在轻松集成至现有系统。该项目主要由68个Python文件、30个HTML文件以及其他相关文件构成,共计136个文件。其中还包括了HTML模板、...

    Python库 | django-taggit-serializer-0.1.5.tar.gz

    而当我们谈到Django的扩展和增强时,就不得不提及一系列优秀的第三方库。其中,django-taggit-serializer就是这样一个为Django添加标签功能的利器。本文将深入探讨django-taggit-serializer的使用、功能以及在实际...

    Python库 | djangocms_algolia-1.3.1.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:djangocms_algolia-1.3.1.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | Files.com-1.0.468-py3-none-any.whl

    今天我们要关注的是PyPI上的一款资源——"Files.com-1.0.468-py3-none-any.whl",这是一款针对Python开发者的工具,特别适用于后端开发。 首先,让我们理解一下".whl"文件。这是一种预编译的Python二进制分发格式,...

    django3-cas-ng-4.0.0.tar.gz

    为支持django3对django_cas_ng进行修改 **Features** - Support CAS version 1.0, 2.0, 3.0 - Support Single Sign Out - Configuration of services via the django Admin application - Fine control on ...

    Django2-by-example-zh.pdf 中文版 20190129修订

    Django 2 by example 博客项目–基础 Django 2 by example 博客项目–增加高级功能 Django 2 by example 博客项目–扩展功能 Django 2 by example 社交网站项目–用户身份验证 Django 2 by example 社交网站项目–-...

    django-admin-bootstrap-master.zip

    【django-admin-bootstrap-master.zip】是一个包含Django管理界面(admin)风格化为Bootstrap主题的项目压缩包。这个项目旨在提供一个美观、响应式且用户体验友好的Django后台管理界面。Bootstrap是一个流行的前端...

    PyPI 官网下载 | django_pumaska-1.0rc2-py3-none-any.whl

    标题中的“PyPI 官网下载 | django_pumaska-1.0rc2-py3-none-any.whl”指的是在Python的包索引服务(Python Package Index,简称PyPI)上发布的名为`django_pumaska`的软件包的1.0 release candidate 2版本。...

    Django1.0速查手册_Django 1.0 Cheat sheet

    此标题表明文档旨在为用户提供Django 1.0版本中的快速查询指南,帮助开发者更快地查阅并应用框架的功能。 #### 描述:Django 1.0 速查手册 描述部分简短重申了标题的内容,强调这是一份针对Django 1.0版本的速查...

    Python库 | bridgecrew-1.0.365-py3-none-any.whl

    "bridgecrew-1.0.365-py3-none-any.whl"是一个针对Python的库,它封装了特定的功能,以便开发者能够更方便地在他们的项目中实现这些功能。这个文件是Python的whl(wheel)格式,它是Python的二进制分发包,用于简化...

    基于Django+Django -Rest-Framework+Python的在线考试系统后端(源码).zip

    1、基于Django+Django -Rest-Framework+Python的在线考试系统后端(源码).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目...

    django-vue3-admin 基于RBAC模型的权限控制的一整套基础开发平台,权限粒度达到列级别,前后端分离

    django-vue3-admin 基于RBAC模型的权限控制的一整套基础开发平台,权限粒度达到列级别,前后端分离,后端采用django + django-rest-framework,前端采用基于 vue3 + CompositionAPI + typescript + vite + ele

    django-classy-tags, 基于类的Django 模板标记.zip

    django-classy-tags, 基于类的Django 模板标记 django-classy-tags请参考文档/目录中的文档以获得帮助。 有关HTML呈现版本的信息,请参见这里的 。 这里项目这个项目的目标是创建一种新的编写 Django 模板标签的方法...

Global site tag (gtag.js) - Google Analytics