(翻译)Django 1.0 中文文档 ----- 第一步

从头开始
 
概要
 
Django 初探
     由于django是在新闻编辑应用中快速发展起来的,所以他被设计的很适合web快速简易开发。这是个简单的概要,介绍如何通过Django编写web应用程序的数据库驱动。
 
     这篇文档的目的是给予你足够的技术细节来理解Django是如何工作的,
但是这并不打算替代辅导资料(tutorial)和参考文档(reference),因为这两个都有了。当你准备开始一个项目,你可以从辅导资料开始或去看更多的文档细节。
 
设计你的模型
 
     当然你可以在使用django的时候不使用数据库,你可以用python代码描述数据库格局,绘制对象关系。
     数据模型语法提供许多方法来描绘你的模型,到目前为止已经是应用了两年的数据库方案。
下面是一个例子

  1. class Reporter(models.Model):
  2.     full_name = models.CharField(max_length=70)
  3.     def __unicode__(self):
  4.         return self.full_name
  5. class Article(models.Model):
  6.     pub_date = models.DateTimeField()
  7.     headline = models.CharField(max_length=200)
  8.     content = models.TextField()
  9.     reporter = models.ForeignKey(Reporter)
  10.     def __unicode__(self):
  11.         return self.headline

 
安装

接下来,运行Django 命令行工具自动创建数据库表
manage.py syncdb
syncdb 命令会检查你所有可用的模型并创建目前数据库中还没有创建的表
 
享用免费的API

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

 

 

 

  1. >>> from mysite.models import Reporter, Article
  2. # No reporters are in the system yet.
  3. >>> Reporter.objects.all()
  4. []
  5. # Create a new Reporter.
  6. >>> r = Reporter(full_name='John Smith')
  7. # Save the object into the database. You have to call save() explicitly.
  8. >>> r.save()
  9. # Now it has an ID.
  10. >>> r.id
  11. 1
  12. # Now the new reporter is in the database.
  13. >>> Reporter.objects.all()
  14. [<Reporter: John Smith>]
  15. # Fields are represented as attributes on the Python object.
  16. >>> r.full_name
  17. 'John Smith'
  18. # Django provides a rich database lookup API.
  19. >>> Reporter.objects.get(id=1)
  20. <Reporter: John Smith>
  21. >>> Reporter.objects.get(full_name__startswith='John')
  22. <Reporter: John Smith>
  23. >>> Reporter.objects.get(full_name__contains='mith')
  24. <Reporter: John Smith>
  25. >>> Reporter.objects.get(id=2)
  26. Traceback (most recent call last):
  27.     ...
  28. DoesNotExist: Reporter matching query does not exist.
  29. # Create an article.
  30. >>> from datetime import datetime
  31. >>> a = Article(pub_date=datetime.now(), headline='Django is cool',
  32. ...     content='Yeah.', reporter=r)
  33. >>> a.save()
  34. # Now the article is in the database.
  35. >>> Article.objects.all()
  36. [<Article: Django is cool>]
  37. # Article objects get API access to related Reporter objects.
  38. >>> r = a.reporter
  39. >>> r.full_name
  40. 'John Smith'
  41. # And vice versa: Reporter objects get API access to Article objects.
  42. >>> r.article_set.all()
  43. [<Article: Django is cool>]
  44. # The API follows relationships as far as you need, performing efficient
  45. # JOINs for you behind the scenes.
  46. # This finds all articles by a reporter whose name starts with "John".
  47. >>> Article.objects.filter(reporter__full_name__startswith="John")
  48. [<Article: Django is cool>]
  49. # Change an object by altering its attributes and calling save().
  50. >>> r.full_name = 'Billy Goat'
  51. >>> r.save()
  52. # Delete an object with delete().
  53. >>> r.delete()

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

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

 

 

 

  1. # In models.py...
  2. from django.db import models
  3. class Article(models.Model):
  4.     pub_date = models.DateTimeField()
  5.     headline = models.CharField(max_length=200)
  6.     content = models.TextField()
  7.     reporter = models.ForeignKey(Reporter)
  8. # In admin.py in the same directory...
  9. import models
  10. from django.contrib import admin
  11. admin.site.register(models.Article)

这个观念就是 你的网站可以让工作人员,客户或你自己管理,而你不需要去创建后台接口,只是管理内容。
创建django应用的一个典型流程是,建立模型,开启管理系统,因此你的工作人员或客户可以先着手数据,然后将当前数据发布


设计你的 URLS

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

 为应用程序设计URLs,你创建一个Python模块URLconf,一个内容的目录,包含简单的URL规则和返回函数之间的映射,
URLconfs将URLs和python代码解耦。
这是个url为上面Reporter/Article例子的配置

 

 

 

  1. from django.conf.urls.defaults import *
  2. urlpatterns = patterns('',
  3.     (r'^articles/(/d)/$''mysite.views.year_archive'),
  4.     (r'^articles/(/d)/(/d)/$''mysite.views.month_archive'),
  5.     (r'^articles/(/d)/(/d)/(/d+)/$''mysite.views.article_detail'),
  6. )

上面的代码以正则表达式的方式映射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视图的例子

 

 

 

  1. def year_archive(request, year):
  2.     a_list = Article.objects.filter(pub_date__year=year)
  3.     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 模板,如下面这个样子


 

 

  1. {% extends "base.html" %}
  2. {% block title %}Articles for {{ year }}{% endblock %}
  3. {% block content %}
  4. <h1>Articles for {{ year }}</h1>
  5. {% for article in article_list %}
  6. <p>{{ article.headline }}</p>
  7. <p>By {{ article.reporter.full_name }}</p>
  8. <p>Published {{ article.pub_date|date:"F j, Y" }}</p>
  9. {% endfor %}
  10. {% 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模板

  1. <html>
  2. <head>
  3.     <title>{% block title %}{% endblock %}</title>
  4. </head>
  5. <body>
  6.     <img src="sitelogo.gif" alt="Logo" />
  7.     {% block content %}{% endblock %}
  8. </body>
  9. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值