1

这篇文章会不断记下开发过程中遇到的一些问题和随想记录,以供以后翻阅

Django 版本: 1.8.4

1 测试生产服务器遇到 400

测试生产服务器中,设置 DEBUG = False,这种情况下 ALLOWED_HOSTS = [] 就会开始起作用,如果设置为空,就是看到的 400,所以这里需要修改允许的 HOST

2 #!/usr/bin/env python 疑问

注意这里不是 #!/usr/bin/python

#!/usr/bin/python 告诉操作系统执行脚本时,调用 /usr/bin 下的python 解释器,这种写法直接写死了 python 解释器路径,不推荐,特别是有多个虚拟环境时

#!/usr/bin/env python 这种写法的目的是为了防止用户没有将 python 装在默认的 /usr/bin 路径中;当执行脚本时,首先会到 env 设置中查找 python 的安装路径,然后再调用对应路径下的解释器

细节

#!/usr/bin/env python 这个写法要看实际情况,不是所有的 Linux 系统都有 /usr/bin/env 这个程序;所以如果需要以 #!/usr/bin/env python 解释脚本,具体操作系统具体情况具体分析;

注明:现在开发用的 UnixDebian 系统都有 /usr/bin/env

3 __name__ = '__main__' 的作用

注明:标题为

__name__ = '__main__' 的作用,至于为什么 __ 会被吃掉,这是 segmentfault markdown 解析脚本的问题导致

代码

if __name__ = '__main__'
    dosomting()
    

这段代码经常出现,刚开始有些疑惑,因为我是 python 小白

有人总结这段脚本:Make a script both importable and executable

这句话说的非常好,模块可以被引入到其他脚本中,也可以自己执行

module.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def Hello():
    print "Hello World···%s"%__name__

if __name__ == '__main__':
    Hello()
    

执行结果

Hello World···__main__
[Finished in 0.1s]

此脚本被引入到另外一个脚本中

test.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from module import  Hello

Hello()

执行结果

Hello World···module
[Finished in 0.1s]

结论:
当直接执行 module.py 时,__name__ == '__main__'True, 当此 module.pyimporttest.py 时,这时 __name__module.py 文件的名字 module 而非 __main__

4 django-admin.py 或 manage.py 的区别

django-admin.pymanage.pyDjango 执行一些管理任务的命令行,他们两者执行的命令是一样的,区别的是当你安装 Django 的时候,最先安装了 django-admin.py,使用它生成一个 project 后,project 才会产生一个 manage.py

所以在一个 project 中把django-admin.py 看成是全局的,即在生成项目之前,也可以使用它完成一些任务;而manage.py 只能在 project 生成后,才用得上它。可能我们在开发环境的时候,习惯使用 manage.py;但他们的用法是一样的

5 安装 MySQL-python 报错

Traceback (most recent call last):
  File "setup.py", line 15, in <module>
    metadata, options = get_config()
  File "/home/zhxia/apps/source/MySQL-python-1.2.3/setup_posix.py", line 43, in get_config
    libs = mysql_config("libs_r")
  File "/home/zhxia/apps/source/MySQL-python-1.2.3/setup_posix.py", line 24, in mysql_config
    raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found

解决方法

这里看到 EnvironmentError: mysql_config not foundmysql 的配置文件未找到

原因:

因为 mysql 不是开发版,编译时缺少相应的配置文件

apt-get install libmysqlclient-dev  libmysqld-dev

6 django app_dirs must not be set when loaders is defined

相关链接

If 'loaders' is present in the TEMPLATES options together with
APP_DIRS set to True, the template engine raises an exception. This
conflict is detected by the system check templates.E001

自己项目配置:

'APP_DIRS': True,
'OPTIONS': {
    'debug': False,
    'context_processors': [
        'django.contrib.auth.context_processors.auth',
        'django.template.context_processors.debug',
        'django.template.context_processors.request',
        'django.template.context_processors.static',
        'django.contrib.messages.context_processors.messages',
    ],
    'loaders': [
        ('django.template.loaders.cached.Loader', [
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',
        ]),
    ],
},

解决方法:

注释掉或删除掉 'APP_DIRS': True, 



青阳半雪
1.6k 声望24 粉丝

现实与完美之间