欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Django
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
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
- Voting by django-voting
- Tagging by django-tagging
- django-localdate
- django-uploadutils
- django-threadedcomments
- django-helpers -- Rails style helpers for Django
- django-tube -- Broadcast yourself... with Django.
- django-diario -- A pluggable weblog;
- django-fleshin -- Photo management application
- django-contact-form -- An extensible contact-form application for Django
- django-registration -- Generic user-registration application;
- django-evolution -- Schema evolution.
More : http://code.djangoproject.com/wiki/DjangoResources#Djangoapplicationcomponents
use Django with FastCGI
成功应用
国外
- http://ellingtoncms.com/
- http://pownce.com/
- http://www.tabblo.com/
- http://www.everyblock.com
- http://www.ljworld.com/
- http://www.pythonware.com
- http://www.djangosnippets.org/
- http://www.djangosites.org/
- http://rfc1437.de/
- Arch Linux - main website for the Arch Linux distribution
- MisterApe.com - Games portal
- rPapers - The easy way to share your working papers and published articles.
- PediaPress.com - Print-on-demand service for individual books based on Wikipedia articles.
- trogger.info - Your Internet Travel Community
- Tabblo - Photo sharing site with a narrative twist. Full online photo editing and page construction.
- Solaris Counter - This is a simple counter for OpenSolaris/Solaris? users.
- parsed.org - A computing tips site.
- Diskbot - Disk Management webapp written in Django
- Photogallery - A photo gallery system
- worldinpictures.org - Enter any worldwide location, see pictures of it (from Flickr).
- http://lucumr.pocoo.org/
国内
- http://www.lzpian.com/ (老照片,有点douban的感觉)
- http://www.ifaxian.com/ (有些特色)
- http://www.aiyo.cn
- http://www.hpbookmarks.com/
Book
- The Django Book: http://books.huihoo.org/django/en/1.0/
文档
- Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点
- Django Book: 一本免费的自由文档,This work is licensed under the GNU Free Document License.