Python+Django笔记之二
一个简单的select * 操作的Django方式:
首先配置urls.py
from django.conf.urls.defaults import *
from misc import viewsurlpatterns = patterns(' ',
(r'^notes/$', views.list_notes),
)
其中r'^notes/$'是regex,用于匹配url;views.list_notes是views.py中的list_notes 方法。
然后写list_notes:
def list_notes(request):
notes = Note.objects.order_by('-created_date')
conduit = {
'notes': notes
}
return render_to_response(
'misc/list.html',
conduit,
context_instance = RequestContext(request),
)
其中conduit这个词来自Mass Effect
最后就是把上面的misc/list.html写出来:
{% extends "base.html" %}
{% block title %}List Notes - {{ block.super }}{% endblock %}
{% block body %}
{% if notes %}
<ul>
{% for note in notes %}
<li>{{ note.created_date }} : {{ note.message }}</li>
{% endfor %}
</ul>
{% else %}
<p>No notes yet.</p>
{% endif %}
{% endblock %}
这样用浏览器访问类似http://localhost:8000/app/notes的url时,全部notes应该就列出来了,并按时间倒序排列。
Python+Django笔记之一
副标题:PGB: Project Galactica Board 启动
从无到有启动一个Django project(Django发音类似Jungle),以pgb为例:
>django-admin.py startproject pgb
设置数据库连接:
>vim pgb/settings.py
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'pgb' # Or path to database file if using sqlite3.
DATABASE_USER = 'root' # Not used with sqlite3.
DATABASE_PASSWORD = 'xxxxxx' # Not used with sqlite3.
建立一个app(app可以看作项目的一个模块,一个app是一系列相关功能的集合,而且可以被多个project共用):
>cd pgb
>python manage.py startapp appname
添加数据模型:编辑app/models.py,以Profile为例(缩进显示有问题,不过简单的class,凑合看吧),
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
name = models.CharField(max_length=20)
hp = models.IntegerField()
ep = models.IntegerField()
gp = models.IntegerField()
level = models.IntegerField()
title = models.CharField(max_length=100)
guild = models.ForeignKey('Guild', related_name='members', null=True, blank=True)def __unicode__(self):
return self.user.username + '.' + self.name注:上面的'Guild'之所以要用引号,是为了解决环状引用的问题(circular model reference),因为Python是只有runtime check的,前面class引用后面定义的class就会出错。
注2:null=True 是针对DB SQL的NULL,blank=True是针对admin app的post validation。
开启Django著名的admin:
- 在urls.py中uncomment(这词有办法翻译么?)相关admin的几行
- 在app文件夹添加admin.py,内容类似如下:
from django.contrib import admin
from pgb.arena.models import Profileadmin.site.register(Profile)
为DB生成Tables:
>python manage.py syncdb
重新生成DB Tables,数据被销毁:
>python manage.py reset appname
启动测试环境:
>python manage.py runserver [port]
第一篇完。


