欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜: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.
目录 |
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
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.