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 新建一超级用户
 
======================================================================

修改表结构<参考http://d2100.com/questions/45284>

目前 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>

 
此时,可通过http://127.0.0.1:8080/excel/查看记录
 
为了可以导入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文件
 
 
 
 
 
标签: ,
本文连接地址: http://www.fresker.com/old2/archives/526 (转载注明出处)

回复

目前暂无评论

Sorry, 评论已关闭.