这篇文章会不断记下开发过程中遇到的一些问题和随想记录,以供以后翻阅
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
解释脚本,具体操作系统具体情况具体分析;
注明:现在开发用的 Unix
和 Debian
系统都有 /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.py
被 import
到 test.py
时,这时 __name__
为 module.py
文件的名字 module
而非 __main__
4 django-admin.py 或 manage.py 的区别
django-admin.py
和 manage.py
是 Django
执行一些管理任务的命令行,他们两者执行的命令是一样的,区别的是当你安装 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 found
即 mysql 的配置文件未找到
原因:
因为 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,