Django

来自开放百科 - 灰狐
2009年2月4日 (三) 02:50Allen (讨论 | 贡献)的版本

跳转到: 导航, 搜索
Django.gif

Django: The Web framework for perfectionists with deadlines

Django 是一个高级 Python web framework,它鼓励快速开发和干净的、MVC设计。它包括一个模板系统,对象相关的映射和用于动态创建管理界面的框架。Django遵守BSD版权。

Django 很象 Ruby on Rails.

目录

Django 2.0

Django 2.0 is far more friendly for Web 2.0 than Ruby on Rails.

“Django 2.0” is, apparently, built on the Django 0.96.2 codebase, which is rather interesting since that means it could be missing:

  • At least one criticial security fix (that’s why we had a Django 0.96.3).
  • The refactored Django ORM, including much more flexible query backends and support for model inheritance (queryset-refactor happened after 0.96).
  • Full Unicode support (the Unicode branch happened after 0.96).
  • Auto-escaping templates, so open wide for cross-site scripting attacks (auto-escaping landed after 0.96).
  • The full django.forms library, including formsets and easy model-generated forms and support for generic relations (all landed after 0.96).
  • Swappable uploading and file-storage handlers (landed after 0.96).
  • The easier-to-use, easier-to-customize, much-more-flexible admin (newforms-admin landed after 0.96).
  • django.contrib.gis for GIS support (landed after 0.96).
  • The refactored contrib.comments (landed after 0.96).
  • The refactored (and immensely faster) signal dispatcher (landed after 0.96).
  • The ability to run Django on the Java virtual machine (Jython compatibility didn’t happen until 1.0).
  • An order-of-magnitude faster test framework (landed last week for Django 1.1).
  • Aggregation support in the ORM (landed last week for Django 1.1).
  • A couple thousand bugfixes which have gone into Django since 0.96.
  • Somewhere around 40,000 lines of added/improved documentation.

特性

  • 对象相关的映射

完全在Python中定义你的数据模型。你可以免费得到一个丰富的,动态访问数据库的API--但如果需要你仍然可以写SQL语句。

  • URL 分发

URL的设计漂亮,cruft-free,没有框架的特定限定。象你喜欢的一样灵活。

  • 模版系统

使用DjanGo强大而可扩展的模板语言来分隔设计、内容和Python代码。

  • Cache系统

可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。

  • 自动化的管理界面

不需要你花大量的工作来创建人员管理和更新内容的接口。DjanGo可以自动完成。

  • 支持多种数据库

已经支持Postgresql, MySql, Sqlite3, Oracle, ado_mssql

安装指南

First, download Django-1.0.tar.gz from http://download.huihoo.com/django/ Then:

tar xzvf Django-0.95.tar.gz
cd Django-0.95
sudo python setup.py install // 会去下载相关 egg 包,egg与Java jar 类似,包含版本化的包和依赖性管理
>>> import django
>>> django.VERSION
cd /var/www
django-admin.py startproject mysite
cd mysite
python manage.py runserver
http://localhost:8000
or http://192.168.1.3:8000 //本机 IP
Alert!: Unable to connect to remote host
可这样启动  #python manage.py runserver 192.168.1.3:8000 
http://192.168.1.3:8000 // OK 啦

MVC

models.py (the database tables)

from django.db import models
class Book(models.Model):
    name = models.CharField(maxlength=50)
    pub_date = models.DateField()

views.py (the business logic)

from django.shortcuts import render_to_response
from models import Book
def latest_books(request):
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})

urls.py (the URL configuration)

from django.conf.urls.defaults import *
import views
urlpatterns = patterns(,
    (r'latest/$', views.latest_books),
)

latest_books.html (the template)

<html><head><title>Books</title></head>
<body>
Books
    {% for book in book_list %} <li>{{ book.name }}</li> {% endfor %}
</body></html>

First App

创建一个polls应用

mysite/python manage.py startapp polls
vi polls/models.py
from django.db import models
class Poll(models.Model):
   question = models.CharField(maxlength=200)
   pub_date = models.DateTimeField('date published')
class Choice(models.Model):
   poll = models.ForeignKey(Poll)
   choice = models.CharField(maxlength=200)
   votes = models.IntegerField()
vi settings.py
INSTALLED_APPS = (
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.sites',
   'mysite.polls'  // 增加这一行
)

创建数据库

mysql>create database polls
vi settings.py
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'polls'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
python manage.py syncdb // 修改表结构后,可用此步骤更新数据库

python manage.py sql polls
BEGIN;
CREATE TABLE `polls_poll` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question` varchar(200) NOT NULL,
    `pub_date` datetime NOT NULL
);
CREATE TABLE `polls_choice` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `poll_id` integer NOT NULL REFERENCES `polls_poll` (`id`),
    `choice` varchar(200) NOT NULL,
    `votes` integer NOT NULL
);
COMMIT;

可看到在mysql中已经创建了相关表

mysql> show tables;
+----------------------------+
| Tables_in_poll             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_message               |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_content_type        |
| django_session             |
| django_site                |
| polls_choice               |
| polls_poll                 |
+----------------------------+
12 rows in set (0.00 sec)
python manage.py shell
>>> from mysite.polls.models import Poll, Choice
>>> Poll.objects.all()
[]
>>> from datetime import datetime
>>> p = Poll(question="What's up?", pub_date=datetime.now())
>>> p.save()
>>> p.id
1L
>>> p.question
"What's up?"
>>> p.pub_date
datetime.datetime(2006, 9, 1, 15, 8, 1, 135114)

Django admin site默认没有激活,可通过以下三个步骤激活它

1. Add "django.contrib.admin" to your INSTALLED_APPS setting in settings.py
2. Run python manage.py syncdb // Creating table django_admin_log
3. vi urls.py  
 (r'^admin/', include('django.contrib.admin.urls')),
python manage.py runserver
http://local:8000/admin/ :)
vi mysite/polls/models.py
class Polls(models.Model):
   # ...
   class Admin:
       pass
vi mysite/urls.py

from django.conf.urls.defaults import *
urlpatterns = patterns(,
    (r'^polls/$', 'mysite.polls.views.index'),
    (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'),
    (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'),
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
)
vi mysite/polls/views.py

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")
def detail(request, poll_id):
   return HttpResponse("You're looking at poll %s." % poll_id)
http://localhost:8000/polls/
Hello, world. You're at the poll index.
http://localhost:8000/polls/100
You're looking at poll 100.

Databases

DEFAULT_CHARSET = 'utf-8'
#DATABASE_ENGINE = 'sqlite3'
#DATABASE_NAME = os.path.join(DIRNAME, 'database.db')
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'tagging_test'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
#DATABASE_ENGINE = 'postgresql_psycopg2'
#DATABASE_NAME = 'tagging_test'
#DATABASE_USER = 'postgres'
#DATABASE_PASSWORD = 
#DATABASE_HOST = 'localhost'
#DATABASE_PORT = '5432'

Use Django with Nginx

Django on Nginx

use Django with Lighttpd

use Django with Apache

edit your httpd.conf

<Location "/mysite/">
   SetHandler python-program
   PythonHandler django.core.handlers.modpython
   SetEnv DJANGO_SETTINGS_MODULE mysite.settings
   PythonDebug On
</Location> 
http://localhost/mysite/

Applications

More : http://code.djangoproject.com/wiki/DjangoResources#Djangoapplicationcomponents

use Django with FastCGI

成功应用

国外

国内

Book

文档

相关项目

相关链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱