django学习记录
django学习
==========================================================
1、上传文件:
(1)、 Django model中数据批量导入bulk_create()
http://www.cnblogs.com/ccorz/p/Django-model-zhong-shu-ju-pi-liang-dao-rubulkcreat.html
http://www.cnblogs.com/CQ-LQJ/p/5089047.html
(2)、上传excel文件存入数据库时,可以不用存入硬盘,而直接读取内存中的数据流。
xlrd api中:xlrd.open_workbook(filename=None,file_contents=None),如果设置了file_contents,filename便不起作用。
如下:
class Upload(object): u'''文件上传类,接受excel,csv文件''' def __init__(self,filename=None,file_contents=None): self.filename = filename self.file_contents = file_contents def get_data(self): '''返回数据''' try: import xlrd #filename读取文件名。file_contents=读取内存中的文件流 wb = xlrd.open_workbook(filename=self.filename,file_contents=self.file_contents) ws = wb.sheets()[0] data = [ws.row_values(i) for i in range(ws.nrows)][2:] return data except: return "xlrd is not exists!"
#使用
data = Upload(file_contents=req.FILES['subfile'].read())
print data.get_data()
(3)、对上传的excel文件进行校验。
def validate_excel(value): """自定义验证内容""" if value.name.split('.')[-1] not in ['xls','xlsx']: raise ValidationError(gettext('文件类型错误: %(value)s'),params={'value': value},) class UpSub(models.Model): subfile = models.FileField(u"文件名称",help_text=u"只能上传excel文件",validators=[validate_excel]) #这里使用自定义的验证 class Meta: verbose_name = u'批量上传变电站' verbose_name_plural = u'批量上传变电站'
(4)、使用 get_or_create(),返回一个元组,第一个参数为get or create 的obj,第二个参数为 create的布尔值,新建数据为True,反之为False。
(5)、如何让admin页面中app按一定顺序显示。由于django的app是按名称顺序,但中文不同于英文名称。处理方法,在app的verbose_name前加入序号。如:
verbose_name = u'变电站' verbose_name_plural = u'1、变电站' verbose_name = u'2、线路' verbose_name_plural = u'2、线路'
其中,verbose_name 为change_list中的app名称,verbose_name_plural为app_list中显示的名称,效果如下:
2、改变admin中app显示的名称
(1),打开该app文件夹的__init__.py 文件,输入:
default_app_config = 'train.apps.TrainConfig'
(2),打开该apps.py文件,输入:(verbose_name即为你要显示的名字,前面加序号可以排序)
#coding:utf-8 from django.apps import AppConfig class TrainConfig(AppConfig): name = "train" verbose_name = u"培训"
(3)效果:
===========================================手动输入的分割线==================================================
2、单独使用django的orm
(1)mytest.py
# -*- coding: utf-8 -*- from django.db import models from django.conf import settings import django #外部调用django时,需要设置django相关环境变量 #设置INSTALLED_APPS信息 INSTALLED_APPS = [ 'mytest', ] #设置数据库信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', #mysql的engine 'NAME': 'plant', #数据库名称 } } #给Django配置相关信息 settings.configure(DATABASES=DATABASES, INSTALLED_APPS=INSTALLED_APPS) #启动Django django.setup() #构造ORM的对象 class Animal_json(models.Model): name = models.CharField(db_column=u'name', max_length=512, primary_key=True) data_json = models.TextField(db_column=u'data_json') def __unicode__(self): return self.name
(2)在数据中定义field。
(3)test.py
#coding:utf-8 from mytest import Animal_json an = Animal_json(name=u"测试1",data_json=u"这是测试1") an.save() an = Animal_json(name=u"测试2",data_json=u"这是测试2") an.save() animals = Animal_json.objects.all() for i in animals: print i.name," --> ",i.data_json
(4)、运行测试