真是堕落,时隔一年半,我才更新了一篇。
这个期间,Django也有了更新,Python也更新了好几个版本,我却没有丝毫的进步,真是罪过......
好了,言归正传,前面介绍了Url、模板、数据库方面的知识,有了这些基本上就可以搞定一个简单的应用了,这次就把以前的知识融合起来,做一个单表的学生管理系统,很简单,增删改查。
在你的工程下,新建一个应用:python manage.py startapp students,然后修改settings.py中的INSTALLED_APPS,把这个新应用加进去。
这么一个管理系统,当然是数据库先行,在models.py中建一个模型吧。

model
from django.db import models

class Student(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
birth = models.DateTimeField()
sex = models.CharField(max_length=1)
email = models.EmailField()
website = models.URLField()

def __str__(self):
return self.full_name
class Admin:
pass

模型里面用到的那些EmailField、URLField什么的,我就不介绍了,大家自己查一下吧。
别忘了同步一下数据库,manage.py syncdb
接下来就是HTML了,这个HTML我还真花费了点时间来做,大家来看看students.html:

HTML
<script type="text/javascript">
function modify(id){
document.form1.action="/students/modify" + id + "/";
document.form1.submit();
}
function del(id){
document.form1.action="/students/delete" + id + "/";
document.form1.submit();
}
function add(){
window.location.href='add/';
}
</script>
<form name="form1" method="post">
<table border cellpadding=2 cellspaceing=2>
<caption align=top>All Students</caption>
<tr>
<td>Name</td>
<td>Address</td>
<td>Birthday</td>
<td>Sex</td>
<td>Email</td>
<td>Website</td>
<td></td>
<td style='display:none'/>
</tr>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.address }}</td>
<td>{{ student.birth|date:"F j, Y" }}</td>
<td>{{ student.sex }}</td>
<td>{{ student.email }}</td>
<td><a href={{student.website}} onclick="DoClick(this)">{{student.website}}</a></td>
<td><input type="submit" value="Modify" onclick="modify({{student.id}})">
<input type="submit" value="Delete" onclick="del({{student.id}})"></td>
<td name="id" style='display:none'>{{student.id}}</td>
</tr>
{% endfor %}
</table>
<hr>
<input type="button" value="Add" onclick="add()">
</form>效果是,每一条数据后有两个Button,分别是Modify和Delete,这两个Button所需要的参数
{{student.id}}是Django给我们加的,因为我没有指定模型的主键,它就自动给加了一个自增长的主键。
数据的最下面就是一个Add Button,这三个Button都是通过JS来实现Url跳转的,而且方式不太一致,大家可以仔细看一看JS中的三个方法。
到这里,Url已经可以基本确定了:
(r'^$', 'students.views.all'),
(r'^modify(\d+)/', 'students.views.modify'),
(r'^delete(\d+)/', 'students.views.delete'),
(r'^add/', 'students.views.add'),
好,先暂停一下,不要就这么把这些Url加到工程的urls.py中去,我们这样做:
在students这个应用中建一个urls.py文件,把上面几个Url加到这里,然后我们修改工程的urls.py,
把下面这句加到工程的urls.py中:
(r'^students/', include('mysite.students.urls')),
这样,以后我们只需修改自己应用的urls.py了。
当然了,你不会把之前的那个Html放到整个工程下面了吧。拿出来吧,在我们的应用下面建一个文件夹templates,这个应用的HTML都放到这里。然后把这个路径加到工程的settings.py中。不会不知道那个节点吧?是TEMPLATE_DIRS节点。
剩下的就是修改信息的HTML页面了,Esay,下面就是student.html:

modify
<form action="/students/update/" method="post">
<table border cellpadding=2 cellspaceing=2>
<caption align=top>Student</caption>
<tr>
<td>name</td>
<td><input type="text" name="name" value={{student.name}}></input></td>
</tr>
<tr>
<td>address</td>
<td><input type="text" name="address" value={{student.address}}></input></td>
</tr>
<tr>
<td>birth</td>
<td><input type="text" name="birth" value={{student.birth}}></input></td>
</tr>
<tr>
<td>sex</td>
<td><input type="text" name="sex" value={{student.sex}}></input></td>
</tr>
<tr>
<td>email</td>
<td><input type="text" name="email" value={{student.email}}></input></td>
</tr>
<tr>
<td>wesite</td>
<td><input type="text" name="website" value={{student.website}}></input></td>
</tr>
<tr style='display:none'>
<td>id</td>
<td><input type="text" name="id" value={{student.id}}></input></td>
</tr>
</table>
<p><input type="submit" value="Submit"></p>
</form>
到此为止,urls.py已经确定了,加入最后一个:
(r'^update/', 'students.views.update'),
好了,即将大功告成,我们只剩下views.py了,这个就简单了,只是控制一下页面跳转,还有更新数据库了。

Code
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import Template, Context
from django.template.loader import get_template
from models import Student
def all(request):
students = Student.objects.all()
return render_to_response('students.html', {'students': students})
def modify(request, sid):
student = Student.objects.get(id=sid)
return render_to_response('student.html', {'student': student})
def delete(request, sid):
s = Student(id=sid)
s.delete()
return HttpResponseRedirect('/students/')
def add(request):
return render_to_response('student.html')
def update(request):
if request.method == 'POST':
name = request.POST['name']
email = request.POST['email']
website = request.POST['website']
sex = request.POST['sex']
birth = request.POST['birth']
address = request.POST['address']
id = request.POST['id']
s = Student(name=name,
email=email,
website=website,
sex=sex,
birth=birth,
address=address)
if id != "":
s.id = id
s.save()
return HttpResponseRedirect('/students/')
让我们试一下吧。
manage.py runserver
没有错误的话,http://127.0.0.1:8000/students/,这个就是正确的地址,自己试一下吧。
做到这里,不知道聪明的你发现了没有,student.html里面的代码很罗嗦,有没有办法简洁一些呢?
另外怎么页面输入什么都是可以的啊?
欲知怎样解决,请听下回分解!