把项目从django1.3升级到django1.4

1、注意不要下错版本,我因为没注意在github上下了文件名为1.4但实际是1.5的开发版,后面出现了很多奇奇怪怪的问题,浪费好久的时间,还纳闷为什么1.4的老显示django 1.5呢?1.5不是还没发布吗?

2、目录结构发生改变,settings.py和urls.py移到一个跟项目同名的App里面,根目录下只留manage.py,并且这个文件的内容跟旧版内容也已经不一样,根据官方文档说明,旧的manage.py仍可使用,但在1.5里将出现不推荐使用的警告,而到1.6,将不再可用。如果是把别的1.4的manage.py复制到将要升级的项目里,记得修改:


    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "laonan.settings")
里面的settings改为要升级的项目的名称。

3、settings.py在时区设置,App位置等有所改变,比如在1.3里,我的博客内App的设置如下:


    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.flatpages',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.contrib.redirects',
        # Uncomment the next line to enable the admin:
        'django.contrib.admin',
        # Uncomment the next line to enable admin documentation:
        'django.contrib.admindocs',
        'photologue',
        'laonan.accounts',
        'laonan.captcha',
        'laonan.blog',
        'laonan.utils',
    )
在1.4 中将变成:

    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.flatpages',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.contrib.redirects',
        # Uncomment the next line to enable the admin:
        'django.contrib.admin',
        # Uncomment the next line to enable admin documentation:
        'django.contrib.admindocs',
        'photologue',
        'accounts',
        'captcha',
        'blog',
        'utils',
    )
代码中的其它import也类似,不能再以"{{ project_name }}.{{ app_name }}"的方式,而是直接"{{ app_name }}"。

4、以前用于放置自定义template filters的templatetags目录,不能再直接放在根目录下,要放在某个具体的App里面,我把它移到了laonan里,跟settings.py和urls.py平级。

5、从URLFields里移除verify_exists. 因为性能和安全原因,在新版的django里不再支持verify_exists.我以前因为debug时这个字段老是去验证,有时候带来一些麻烦,所以一般都设为false,点击见详情这时候把它移除之。

6、django.conf.urls.defaults被废弃,改为django.conf.urls.

7、MIDDLEWARE_CLASSES配置增加django.middleware.clickjacking.XFrameOptionsMiddleware,用于防止clickjacking.

8、更新manage.py内容,可以在安装好django1.4后用startproject命令生成一个,替换掉旧的,注意里面的App名保持跟project一致。

9、增加 require_debug_false filter到logging settings里:


LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

10、移除ADMIN_MEDIA_PREFIX设置。

11、第3点说过时区设置的变化,就是在增加USE_TZ = True,这个改变带来一些编码上的改变,以前获取当前时间是这样的:


   import datetime

   now = datetime.datetime.now()
现在改为:

    import datetime
    from django.utils.timezone import utc
    
    now = datetime.datetime.utcnow().replace(tzinfo=utc)

12、移植函数式的generic views(不移值会出现警告,但不出错)。


   from django.views.generic.simple import direct_to_template
   
   url(r'xxxx/$', direct_to_template, { 'template' :'my_template.html'})
改为:

    from django.views.generic.base import TemplateView
  
    url(r'xxxx/$', TemplateView.as_view(template_name='my_template.html'))
更详细见官方文档

13、url标签更改(不更改不会报错,但会有警告,这个特性也是1.3 就有了的):


   {% url app_name.view_name value1, value2 %}
改为:

    {% load url from future %}
    {% url 'app_name.view_name' arg1=value1 arg2=value2 %}
其中 {% load url from future %}一个页面只要顶上有一句就行。 官方文档说明

14、管理界面的css有调整,需要把旧的替换掉,不然可能会有找不到图片之类的小问题存在

15、更多去除警告的小技巧一枚:用$ python -Wall manage.py runserver命令检查代码,如果有警告,改之。

For example, "name@something.com". If someone replies to you it will be via email.
For example, "http://someaddress.com"