Django启动项目命令django-admin runserver 和python manage.py runserver区别小记

接手项目是Django写的,又开始正式学习Django,一般用python manage.py runserver,运行项目都没问题。

看文档说django-admin runserver 同样也能启动项目

开发环境:

mac os10.14

python2.7

django1.8

 

但是试了一下报错:

django.core.exceptions.ImproperlyConfigured: 
Requested setting INSTALLED_APPS, but settings are not configured. 
You must either define the environment variable DJANGO_SETTINGS_MODULE 
or call settings.configure() before accessing settings.

主要原因就是没有设置DJANGO_SETTINGS_MODULE这个环境变量,变量的值就是"项目名称.settings",我的项目就是mysite,对应的的值就是:mysite.settings

设置环境变量方法:

1、可以设置临时生效的,直接在终端执行命令:

export DJANGO_SETTINGS_MODULE=mysite.settings

2、者直接修改bash文件配置,我用的是oh my zsh,所以我修改~/.zshrc,在文件中同样添加这句:

export DJANGO_SETTINGS_MODULE=mysite.settings

执行source ~/.zshrc,修改生效 

 再次执行django-admin runserver依然报错:

ImportError: No module named mysite.settings

这个错误原因是没有把项目路径添加加到python的搜索路径中,所以找不到模块。

本来在python环境中直接sys.path.append('路径')就行了,结果在shell终端中没调用python的方法,先在python环境中执行添加路径在切换到shell也不行,查查看能不能永久设置python搜索路径,果然,设置python环境变量PYTHONPATH就行了,跟设置系统环境变量PATH差不多。

再次编辑~/.zshrc,(其他bash编辑对应配置文件)

#设置环境变量

export DJANGO_SETTINGS_MODULE=mysite.settings

#设置python的搜索路径环境变量,将项目路径"/Users/wangjinyu/PycharmProjects/mysite"添加到python的搜索路径

export PYTHONPATH=$PYTHONPATH:/Users/wangjinyu/PycharmProjects/mysite,

执行source ~/.zshrc,修改生效 

另一种永久添加python搜索路径的方法,配置.pth文件,亲测也有效https://www.jianshu.com/p/2006213563ca

再次执行django-admin runserver项目终于跑起来了!

再回顾文档。

django-admin is Django’s command-line utility for administrative tasks. This document outlines all it can do.

In addition, manage.py is automatically created in each Django project. It does the same thing as django-admin,but also sets the DJANGO_SETTINGS_MODULE environment variable so that it points to your project’s settings.pyfile.

django-admin 和 manage.py都做一样的事,只不过manage.py会设置环境变量DJANGO_SETTINGS_MODULE

看一下manage.py默认代码:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings")
这句代码完成了环境变量的设置,

同时python执行manage.py时,python的机制是会自动将执行的py文件所在的目录添加到python的搜索路径。manage.py的路径就是项目的根路径,所以自然能找到mysite.settings模块了

而django-admin runserver就需要手动完成设置环境变量和添加python搜索路径这两件事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值