Django

来自开放百科 - 灰狐
2008年12月16日 (二) 02:45Allen (讨论 | 贡献)的版本

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

Django: The Web framework for perfectionists with deadlines

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

Django 很象 Ruby on Rails.

目录

特性

  • 对象相关的映射

完全在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

文档

相关链接

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

变换
操作
导航
工具箱