excel数据对应数据库处理
创建应用
./manage.py startapp exceltest
修改urls.py
去除掉以下几行前面的#
from django.contrib import admin
admin.autodiscover()
url(r’^admin/’, include(admin.site.urls)),
进入/exceltest/,编辑models.py
#!/usr/bin/python
# -*- encoding:UTF-8 -*-
from django.db import models
class Excel(models.Model):
name = models.CharField(‘姓名’,max_length=20,unique=True)
gender = models.CharField(‘性别’,choices=((‘M’,'男’),(‘F’,'女’)),max_length=1)
telphone = models.CharField(‘电话’,max_length=20)
mobile = models.CharField(‘手机’,max_length=11)
def __repr__(self):
return self.name
#下面部分为了让性别选择使用radio的方式在admin页面给与选择
from django.contrib import admin
class ExcelAdmin(admin.ModelAdmin):
model = Excel
radio_fields = {‘gender’:admin.VERTICAL}
admin.site.register(Excel,ExcelAdmin)
同步数据库
./manage.py syncdb #使models的设置与数据库同步
注意:如果出现databaseerror : no table django_session之类的,注意查看settings.py中sqlite属性,给的name是否为绝对路径,相对路径易出现此问题
使用我们之前的root/123456登陆,进入界面,可以对excel进行相应的添加,删除,修改操作
也可以使用./manage.py createsuperuser 新建一超级用户
======================================================================
目前 Django 没有一个特别的命令可以直接更新表结构。为什么呢?在 Django 看来修改表结构并不是件很容易的事情,主要的问题是数据库中现有的数据怎么办,因此为了使旧的数据可以平滑迁移到新的表结构中,这步操作还是手工来做好一些。但现在我们正在开发中,因此很有可能表结构要经常发生变化,每次手工做多麻烦呀。 Django 有一个命令行命令: sqlreset 可以生成 drop 表,然后创建新表的 SQL 语句,因此我们可以先调用这个命令,然后通过管道直接导入数据库的命令行工具中。这里我使用的是 sqlite3 ,因此我这样做:
manage.py sqlreset address|sqlite3 data.db
sqlreset 后面是要处理的 app 的名字,因此它只会对指定的 app 有影响。但这样,这个 app 的所有数据都丢失了。如果想保留原有数据,你需要手工做数据切换的工作。
Note
另外 django-amdin.py 还提供了更为简单的命令 manage.py reset address ,效果同上面是一样的。
对于其它的数据库,在数据库命令行可能是不同的,这个你自已去掌握吧。同时对于 sqlite3 ,有人可能想:直接把数据库文件删除了不就行了。但是你一定要清楚,如果存在其它的 app 的话,它们的数据是否还有用,如果没用删除当然可以,不过相应的 app 都要再重新 install 一遍以便初始化相应的表。如果数据有用,这样做是非常危险的,因此还是象上面的处理为好,只影响当前的 app 。
==========================================================================
使用通用views来显示我的excel内容
修改urls.py
添加
url(r’^excel/’,include(‘exceltest.urls’)), #此处使用include来指向exceltest的urls.py
在/exceltest/中添加urls.py
from django.conf.urls.defaults import *
from exceltest.models import Excel
ini_dict = {
‘queryset’:Excel.objects.all(),
}
urlpatterns = patterns(”,
url(r’^/?$’,'django.views.generic.list_details.object_list’,ini_dict),
)
通用views object_list对应appname/name_list.html
在exceltest/下创建/templates/exceltest/
创建excel_list.html
# -*- encoding:UTF-8 -*-
<h1>Excel</h1>
<hr />
<table>
<tr>
<th>姓名</th>
<th>性别</th>
<th>电话</th>
<th>手机</th>
<th>QQ</th>
</tr>
{% for user in object_list %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.gender }}</td>
<td>{{ user.telphone }}</td>
<td>{{ user.mobile }}</td>
<td>{{ user.qq }}</td>
</tr>
{% endfor %}
</table>
为了可以导入excel数据,修改excel_list.html,添加导入入口
<hr />
<form enctype=”multipart/form-data” method=”POST” action=”/excel/upload/”>
UPLOAD FILE:<input type=”file” name=”filename” /> <Br/>
<input type=”submit” name=”提交” />
</form>
由于csv导入问题较多,暂时未成功实现,留待后续完成
实现csv导出功能
修改urls.py
添加:url(r’^output/$’,'exceltest.views.output’),
在templates/exceltest/下添加csv.html文件
{% for row in data %}
{% for info in row %}
“{{ info|addslashes }}”,
{% endfor %}
{% endfor %}
在excel_list.html添加导出链接
<p><a href=”/excel/output/”>导出为csv格式文件</a></p>
在views中添加
from django.template import loader,Context
from django.http import HttpResponse
def output(request):
response = HttpResponse(mimetype=’text/csv’)
response['Content-Disposition'] = ‘attachment;filename=%s’ %’excel.csv’
t = loader.get_template(‘exceltest/csv.html’)
objs = Excel.objects.all()
d = []
for row in objs:
d.append((row.name,row.gender,row.telphone,row.mobile,row.qq))
c = Context({‘data’:d})
response.write(t.render(c))
return response
现在点击到处链接,可获取下载的csv文件
目前暂无评论