一、Hello Django!1、生成项目目录
django-admin.py startproject newtedst这样就在当前目录下创建了一个newtest 目录,里面有四个文件:__init__.py 表示这是一个 Python 的packagemanage.py 提供简单化的 django-admin.py 命令,特别是可以自动进行DJANGO_SETTINGS_MODULES和 PYTHONPATH 的处理settings.py Django的配置文件 uls.py url映射处理文件,Django 的url映射是url对于某个模块方法的映射,目前不能自动完成2、hellodjango在 newtest 目录下创建一个文件 hellodjango.py 内容为:
from django.http import HttpResponsedef index(request): return HttpResponse("Hello, Django.")3、URL Dispatch在 Django 中,真正调用时需要通过 URL Dispatch 来实现url与模块方法的映射。修改urls.py:
from django.conf.urls.defaults import *urlpatterns = patterns('', # Example: # (r'^newtest/', include('newtest.apps.foo.urls.foo')), (r'^$', 'newtest.hellodjango.index'), # Uncomment this for admin:# (r'^admin/', include('django.contrib.admin.urls')),)urlpatterns实际上为一个包含了某一url正则表达式及其对应的callable object的list。4、启动服务器Django 为了开发方便,自带了一个用于开发的 web server:
python manage.py runserver二、使用form1、一个简单的 web 加法器 add.py
from django.http import HttpResponsetext = """<form method="post" action="/add/"> <input type="text" name="a" value="%d"> + <input type="text" name="b" value="%d"> <input type="submit" value="="> <input type="text" value="%d"></form>"""def index(request): if request.POST.has_key('a') and request.POST.has_key('b'): a = int(request.POST['a']) b = int(request.POST['b']) else: a = 0 b = 0 return HttpResponse(text % (a, b, a + b))请注意 action 为 /add/ ,在 Django 中链接后面一般都要有 '/' ,不然有可能得不到 POST 数据。有关更详细的关于常见问题可以参阅 NewbieMistakes 文档。如果你想从 POST 或 GET 数据中得到值,使用 request.POST 或 request.GET 或还有一个可以“统吃”的方法 request.REQUEST ,它们是一个dict。2、增加 add 的 url 映射
from django.conf.urls.defaults import *urlpatterns = patterns('', # Example: # (r'^newtest/', include('newtest.apps.foo.urls.foo')), (r'^$', 'newtest.hellodjango.index'), (r'^add/$', 'newtest.add.index'), # Uncomment this for admin:# (r'^admin/', include('django.contrib.admin.urls')),)三、使用模板1、创建 list.py以显示一个通讯录为例说明:
#coding=utf-8from django.shortcuts import render_to_responseaddress = [ {'name':'张三', 'address':'地址一'}, {'name':'李四', 'address':'地址二'} ]def index(request): return render_to_response('list.html', {'address': address})render_to_response 可以直接调用模板并返回生成好的文本。它接收两个参数,第一个是模板的文件名。第二个参数是一个字典,这里只有一个 Key ,名字是 address ,它的值是一个字典的列表。2、在 newtest 中创建 templates 目录修改 settings.py:
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates". # Always use forward slashes, even on Windows. './templates',)如果有多个模板目录,加进去就行了。Django 会按顺序搜索的。Django 还支持在 app 中定义一个 templates 目录。这样 Django 在启动时会检查所有安装的的 app 的 templates 目录,如果存在,则将路径的搜索放在 TEMPLATE_DIRS 之后。3、创建 templates/list.html
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><h2>通讯录</h2><table border="1"> <tr><th>姓名</th><th>地址</th></tr> {% for user in address %} <tr> <td>{{ user.name }}</td> <td>{{ user.address }}</td> </tr>{% endfor %}</table>4、增加 list 的 url 映射
from django.conf.urls.defaults import *urlpatterns = patterns('', # Example: # (r'^testit/', include('newtest.apps.foo.urls.foo')), (r'^$', 'newtest.hellodjango.index'), (r'^add/$', 'newtest.add.index'), (r'^list/$', 'newtest.list.index'), # Uncomment this for admin:# (r'^admin/', include('django.contrib.admin.urls')),)
|