django多个app怎么关联(2023年最新解答)

是这样的,想请分析下,django多个app怎么关联(2023年最新解答)
最新回答
夏了夏天

2024-11-29 09:13:44

导读:许多朋友对如何在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的仓库安装。
```bash
sudo apt-get install nginx
```
安装启动Nginx:
```bash
sudo /etc/init.d/nginx start
```
关闭Nginx:
```bash
sudo /etc/init.d/nginx stop
```
重启Nginx:
```bash
sudo /etc/init.d/nginx restart
```
修改Nginx默认端口号,打开/etc/nginx/nginx.conf文件,修改端口号。
```nginx
server {
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。
```bash
sudo python3-pip install uwsgi
```
测试uwsgi,创建test.py文件:
```python
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"Hello World"]
```
通过uwsgi运行该文件。
```bash
sudo 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 settings
socket=:8000
# the base directory (full path)
chdir=/home/fnngj/pydj/myweb
# Django's wsgi file
module=myweb.wsgi
# process-related settings
# master master=true
processes=4
# threads
threads=2
# stats
stats=127.0.0.1:9191
```
这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。socket指定项目执行的端口号。chdir指定项目的目录。module myweb.wsgi,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。其它几个参数,可以参考上一小节中参数的介绍。
接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。
```bash
fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb
fnngj@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;