初学Django,可能通过一些实例学习,比看满屏的E文更有效些,所以写了一个实例来展示一下Django的添加 修改 删除三个基本操作。希望对想学Django的朋友有所帮助。本文只适合刚开始了解Django的人,有实战的朋友请跳过。前提条件 已经配置好Django环境,如果还没有配置好,请参考之前的 Windows下配置Django开发环境。 1 新建一个Django项目Project,在Dos控制台上,选定项目的存放目录,然后执行: django-admin.py startproject django_aud 进入刚刚生成的项目目录下 cd django_aud,发现了四个py文件:__init__.py manage.py url.py settings.py,说明项目创建成功。 2 新建一个App,在Dos控制台上执行: cd django_aud manage.py startapp blog 这时你发现了多了一个文件夹blog,里面也有 四个py文件 __init__.py models.py tests.py views.py 说明App创建成功。 3 配置项目 数据库选用python库里自带的sqlite3,在项目的根目录下,编辑 settings.py: DATABASE_ENGINE = 'sqlite3' DATABASE_NAME = 'db' 给DATABASE_ENGINE赋值,指定了项目使用的数据库的类型;给DATABASE_NAME赋值,指定了数据库的名字。 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'blog', ) 最后的一行'blog',是把我们刚才新建的App blog附加到整个项目中。它上面的四行代码是 django自动生成的必要App,不用理会他们。 编辑项目的urls.py,给App blog指定urls,我们暂时加入 url(r'^blog/', include('blog.urls'),name="blog_index"), 注意include函数的参数 是blog.urls,但是我们在App blog下,还没有创建urls.py,后面我们会加上去。 4 编写blog App。 我们用一个最简单的blog实体做示范;首先先加入 模块:urls.py 和forms.py 和存放html文件的文件夹templates/blog/ App 的文件结构: -blog --templates ----blog --models.py --urls.py --forms.py --views.py --__init__.py 步骤1:定义blog的models实体: #coding=utf-8 from django.db import models class Blog(models.Model): title=models.CharField(u"标题",max_length=60) content=models.TextField(u"正文") created_at=models.DateTimeField(u"建立时间",auto_now_add=True) updated_at=models.DateTimeField(u"修改时间",auto_now=True) def __uncode__(self): return self.title class Meta: ordering = ['-updated_at','-created_at'] 说明:定义了Blog类,它就相当一个blog表,表里有title content和created_at updated_at。max_length是必须的参数,指定字段的长度。auto_now_add表示添加一条记录的时候,时间自动插入当前的时间,auto_now=True表示第一次添加记录的时候,插入当前时间,如果是修改记录的时候,时间给替换成修改的时间。ordering 是记录集的 排序,如上,首先根据 记录的更新时间降序排序,再更建立时间降序排。如果不指定该子类,记录集将按照记录的建立时间 升序排序。 步骤2:定义blog的urls: #coding=utf-8 from django.conf.urls.defaults import * urlpatterns = patterns('', url(r'^add/$', 'blog.views.add',name="blog_add"), url(r'^list/$', 'blog.views.list',name="blog_list"), url(r'^update-(?P<id>\d+)/$', 'blog.views.update',name="blog_update"), url(r'^delete-(?P<id>\d+)/$', 'blog.views.delete',name="blog_delete"), ) 说明:blog的urls,实际就是一个页面的链接地址,如上定义了四条链接地址,name可以看做页面的名字。urls 会根据浏览器上的链接输入,定向到步骤4 views的具体action中指定的函数。如blog_add的“blog.views.add”,说明会定向到App blog下的views.py add函数,执行该函数的动作。最好理解的比方就是 在浏览器上输入: http://127.0.0.1:8000/blog/add/ 后 Django会根据浏览器的地址,执行blog下views.py add函数。 步骤3:定义blog的forms: #coding=utf-8 from django.forms import ModelForm from models import Blog class AddForm(ModelForm): class Meta: model=Blog 说明:Django的form作用就是生成表单,比如文本输入框等。上面的例子,是根据models下的Blog类,生成Blog的表单。我们添加 修改数据的时候,就有输入口了。 步骤4:集中精力写blog的views #coding=utf-8 from django.shortcuts import render_to_response,get_object_or_404 from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from models import Blog from forms import AddForm def list(request): list=Blog.objects.all() return render_to_response('blog/list.html', {'list': list}) def add(request): if request.method=="POST": form=AddForm(request.POST) if form.is_valid(): blog=form.save() #blog.save() return HttpResponseRedirect(reverse("blog_list")) return render_to_response('blog/add.html', {'form': AddForm()}) def update(request,id): blog=get_object_or_404(Blog,pk=int(id)) if request.method=="POST": form=AddForm(request.POST,instance=blog) if form.is_valid(): blog=form.save() #blog.save() return HttpResponseRedirect(reverse("blog_list")) return render_to_response('blog/add.html', {'form': AddForm(instance=blog)}) def delete(request,id): blog=get_object_or_404(Blog,pk=int(id)) blog.delete() return HttpResponseRedirect(reverse("blog_list")) 说明:views是实例中最重点的部分。里面定义的函数,直接和urls关联,一个urls地址关联一个views的函数。list函数,表示取出数据库对应blog表的全部记录,然后把数据渲染到指定的html模板中。浏览器上才能看到结果。 步骤5:给每个页面写html代码。我们的实例一共有4个页面blog_list blog_add blog_update blog_delete,除了不需要写blog_delete外(delete删除我们的做法是利用一个a链接触发views的delete函数,把记录删除后返回到列表页blog_list,所以暂时不需要html页面),其他的页面有3个,我把关键的代码贴出来: list.html {%for blog in list%}<div style="border-bottom:1px dotted #ccc;"> <h3>{{blog.title}}</h3> <p>{{blog.content}}</p> <p><a href="{%url blog_add%}">添加</a> <a href="{%url blog_update blog.id%}">修改</a> <a href="{%url blog_delete blog.id%}" onclick="return confirm('你确认要删除吗?')">删除</a></p> </div> {%endfor%} add.html update.html <form method="post" > <table> {{form.as_table}} </table> <input type="submit"/> <a href="{%url blog_list%}">返回列表</a> </form> 实例就算完成了。回到Dos下。执行: manage.py syncdb 根据blog实体生成相应的数据库表,django会根据你步骤1的Blog实体类的定义生成一个表(当然也会生成必要的表,根据项目配置文件settings.py的INSTALLED_APPS而定)。 manage.py runserver 启动web内置服务器 打开浏览器输入:http://127.0.0.1:8000/blog/list/ 就可以看到我们的实例效果了。
|
|