最近尝试用django开发一个叫做vmm的虚拟机管理网站。以下是我在第一次使用django开发较完整网站时学到的东西。
TIME_ZONE
首先是发现django在显示datetime时与预期不太一样,比如下午2点时页面上直接输出datetime显示为早上6点。多多少少决定和时区设置有关系。从Dash看了django的时区配置,发现在网站的settings中有TIMEZONE这一选项,默认是UTC。据文档上上默认是加拿大的时区……所以把TIMEZONE改成上海就行了。
TIME_ZONE = 'Asia/Shanghai' # default is UTC
模型和数据库表的同步
开发web最常做的事情莫过于和数据库打交道,django的syncdb和rails等全栈式的web框架的应用到数据库的同步类似,很大得方便了数据库操作。
使用步骤主要如下:
设定models.py中的模型
class MachineTemplate(models.Model): name = models.CharField(max_length = 255) description = models.TextField() planned = models.IntegerField(default = 0) used = models.IntegerField(default = 0)
在settings.py中加入模型所在的app
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'machine', )
最后执行./manage.py syncdb
顺便说一句,如果做了不是新增字段的修改,比如去除某个属性,去掉某个模型之类的,那么可以使用./manage.py flush重建表。不过所有数据都会没有。另外一种方法是通过数据库工具修改表结构。
admin界面
似乎是django独有的一个功能,天生提供一个admin界面管理数据模型。所以只要你建立了一个模型,并加入admin界面,就可以在admin界面上像在后台一样操作这些数据。加入方法是:
from django.contrib import admin from machine.models import MachineTemplate class MachineTemplateAdmin(admin.ModelAdmin): list_display = ('name', 'planned', 'used') admin.site.register(MachineTemplate, MachineTemplateAdmin)
最后语句register执行模型的注册。list_display控制admin界面模型显示的列。
另外,admin界面显示外键数据(比如在显示书的出版商)可以在模型的__unicode__方法上控制
class MachineTemplate(models.Model): name = models.CharField(max_length = 255) description = models.TextField() planned = models.IntegerField(default = 0) used = models.IntegerField(default = 0) def __unicode__(self): return self.name
模板与静态文件位置
和app结合来看,模板与静态也可以类似app一样分模块,有层次关系,即公共模板与个别模块的模板等等。
不过考虑到代码中还是要通过app名区分模板,所以把模板和静态文件分离到各个模块下就不是非常有必要了。
个人使用的模板和静态文件位置配置很简单,在settings.py中:
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'), )
以上就是个人最近学习django的一点心得。