导读:许多朋友对如何在Django中关联多个app的问题感到困惑,本文将为您解答这个疑惑,希望对您有所帮助!为什么Django要将所有app放在同一个目录中?我是一个新手,才刚刚开始学习。我的理解是,因为BASE_DIR是获取项目配置根目录的路径,Django不会寻找项目配置目录文件夹以外的文件夹。那么,如果是多个APP共存一个目录下,就必须把这个文件夹路径加入到环境变量中,即把'apps'这个文件夹加入进去。实际上,sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))就是将路径插入到当前环境变量中,而os.path.join()是添加路径的一个Python函数,可以在Python命令行下使用help(os.path.join)进行查看,需要导入os这个包才能使用。如果这篇文章能够帮助到您,请采纳。如何使用nginx关联Django应用通过Nginx部署Django(基于ubuntu)?Django的部署可以有多种方式,采用nginx+uwsgi的方式是其中比较常见的一种。在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收所有的请求,统一管理请求。nginx把所有的静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有的非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。可见,uwsgi的作用就像一个桥接器。起到桥梁的作用。Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。一、安装NginxNginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。Nginx官网:打开ubuntu控制台(ctrl+alt+t)利用Ubuntu的仓库安装。```bashsudo apt-get install nginx```安装启动Nginx:```bashsudo /etc/init.d/nginx start```关闭Nginx:```bashsudo /etc/init.d/nginx stop```重启Nginx:```bashsudo /etc/init.d/nginx restart```修改Nginx默认端口号,打开/etc/nginx/nginx.conf文件,修改端口号。```nginxserver { listen 8088; # 修改端口号 server_name localhost; charset koi8-r; access_log logs/host.access.log main; location / { root html; index index.html index.htm; }}```大概在文件36行的位置,将默认的80端口号改成其他端口号,如8088。因为默认的80端口号很容易被其他应用程序占用。然后,通过上面命令重启nginx。访问:http://127.0.0.1:8088/如果出现如上图,说明Nginx启动成功。二、安装uwsgi通过pip安装uwsgi。```bashsudo python3-pip install uwsgi```测试uwsgi,创建test.py文件:```pythondef application(env, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b"Hello World"]```通过uwsgi运行该文件。```bashsudo uwsgi --http:8001 --wsgi-file test.py```接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/home/fnngj/pydj/mywebfnngj@ubuntu:~/pydj/myweb$ uwsgi --http:8001 --chdir/home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes4 --threads2 --stats 127.0.0.1:9191常用选项:- http:协议类型和端口号- processes:开启的进程数量- workers:开启的进程数量,等同于processes(官网的说法是spawn the specified number of workers/processes)- chdir:指定运行目录(chdir to specified directory before apps loading)- wsgi-file:载入wsgi-file(load .wsgi file)- stats:在指定的地址上,开启状态服务(enable the stats server on the specified address)- threads:运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in pre-threaded mode with the specified number of threads)- master:允许主进程存在(enable master process)- daemonize:使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。- pidfile:指定pid文件的位置,记录主进程的pid号。- vacuum:当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated files/sockets)三、Nginx+uwsgi+Django接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:myweb/├── manage.py├── myweb/│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py└── myweb_uwsgi.ini在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。```ini# myweb_uwsgi.ini[uwsgi]# Django-related settingssocket=:8000# the base directory (full path)chdir=/home/fnngj/pydj/myweb# Django's wsgi filemodule=myweb.wsgi# process-related settings# master master=trueprocesses=4# threadsthreads=2# statsstats=127.0.0.1:9191```这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。socket指定项目执行的端口号。chdir指定项目的目录。module myweb.wsgi,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。其它几个参数,可以参考上一小节中参数的介绍。接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。```bashfnngj@ubuntu:~$ cd /home/fnngj/pydj/mywebfnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini```注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。```nginx……server { listen 8099; server_name 127.0.0.1; charset UTF-8; access_log /var/log/nginx/myweb_access.log; error_log /var/log/nginx/myweb_error.log; client_max_body_size 75M; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 2; } location /static { expires 30d; autoindex on; add_header Cache-Control private;