问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2024-09-15 08:13

我来回答

1个回答

热心网友 时间:2024-10-22 18:39

导读:很多朋友问到关于django多个app怎么关联的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

为什么django这样设置就能实现把所有app放到同一个目录?

我也是新手,才学习?我的理解是因为BASE_DIR是获取项目的配置根目录文件夹,Django不会寻找项目配置目录文件夹以外的文件夹,那么如果是多个APP共存一个文件下,就必须把这个文件夹路径加入到环境变量中,即把‘apps’这个文件夹加入进去?,sys.path.insert(0,os.path.join(BASE_DIR,‘apps’))即插入到当前环境变量中,而os.path.join()是添加路径可在Python命令行下使用help(os.path.join)进行查看,需要导入os这个包才可以。如果能够帮助到你,请采纳

如何用nginx关联django应用

通过Nginx部署Django(基于ubuntu)

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。

一、安装Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。

Nginx官网:

打开ubuntu控制台(ctrl+alt+t)利用Ubuntu的仓库安装。

fnngj@ubuntu:~$sudoapt-getinstallnginx#安装

启动Nginx:

fnngj@ubuntu:~$/etc/init.d/nginxstart#启动

fnngj@ubuntu:~$/etc/init.d/nginxstop#关闭

fnngj@ubuntu:~$/etc/init.d/nginxrestart#重启

修改Nginx默认端口号,打开/etc/nginx/nginx.conf文件,修改端口号。

复制代码

server{

listen8088;#修改端口号

server_namelocalhost;

#charsetkoi8-r;

#access_loglogs/host.access.logmain;

location/{

roothtml;

indexindex.htmlindex.htm;

}

复制代码

大概在文件36行的位置,将默认的80端口号改成其它端口号,如8088。因为默认的80端口号很容易被其它应用程序占用。

然后,通过上面命令重启nginx。访问:http//127.0.0.1:8088/

如果出现如上图,说明Nginx启动成功。

二、安装uwsgi

通过pip安装uwsgi。

root@ubuntu:/etc#python3-mpipinstalluwsgi

测试uwsgi,创建test.py文件:

defapplication(env,start_response):

start_response('200OK',[('Content-Type','text/html')])

return[b"HelloWorld"]

通过uwsgi运行该文件。

fnngj@ubuntu:~/pydj$uwsgi--http:8001--wsgi-filetest.py

接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/home/fnngj/pydj/myweb

fnngj@ubuntu:~/pydj$uwsgi--http:8001--chdir/home/fnngj/pydj/myweb/--wsgi-filemyweb/wsgi.py--master--processes4--threads2--stats127.0.0.1:9191

常用选项:

http:协议类型和端口号

processes:开启的进程数量

workers:开启的进程数量,等同于processes(官网的说法是spawnthespecifiednumberofworkers/processes)

chdir:指定运行目录(chdirtospecifieddirectorybeforeappsloading)

wsgi-file:载入wsgi-file(load.wsgifile)

stats:在指定的地址上,开启状态服务(enablethestatsserveronthespecifiedaddress)

threads:运行线程。由于GIL的存在,我觉得这个真心没啥用。(runeachworkerinprethreadedmodewiththespecifiednumberofthreads)

master:允许主进程存在(enablemasterprocess)

daemonize:使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonizeuWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

pidfile:指定pid文件的位置,记录主进程的pid号。

vacuum:当服务器退出的时候自动清理环境,删除unixsocket文件和pid文件(trytoremoveallofthegeneratedfile/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类型的配置。

复制代码

#myweb_uwsgi.inifile

[uwsgi]

#Django-relatedsettings

socket=:8000

#thebasedirectory(fullpath)

chdir=/home/fnngj/pydj/myweb

#Djangoswsgifile

mole=myweb.wsgi

#process-relatedsettings

#master

master=true

#maximumnumberofworkerprocesses

processes=4

#...withappropriatepermissions-maybeneeded

#chmod-socket=664

#clearenvironmentonexit

vacuum=true

复制代码

这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

socket指定项目执行的端口号。

chdir指定项目的目录。

molemyweb.wsgi,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。

其它几个参数,可以参考上一小节中参数的介绍。

接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

复制代码

fnngj@ubuntu:~$cd/home/fnngj/pydj/myweb/

fnngj@ubuntu:~/pydj/myweb$uwsgi--inimyweb_uwsgi.ini

[uWSGI]gettingINIconfigurationfrommyweb_uwsgi.ini

***StartinguWSGI2.0.12(32bit)on[SatMar1213:05:062016]***

compiledwithversion:4.8.4on26January201606:14:41

os:Linux-3.19.0-25-generic#26~14.04.1-UbuntuSMPFriJul2421:18:00UTC2015

nodename:ubuntu

machine:i686

clocksource:unix

detectednumberofCPUcores:2

currentworkingdirectory:/home/fnngj/pydj/myweb

detectedbinarypath:/usr/local/bin/uwsgi

!!!nointernalroutingsupport,rebuildwithpcresupport!!!

chdir()to/home/fnngj/pydj/myweb

yourprocessesnumberlimitis15962

yourmemorypagesizeis4096bytes

detectedmaxfiledescriptornumber:1024

lockengine:pthreadrobustmutexes

thunderlock:disabled(youcanenableitwith--thunder-lock)

uwsgisocket0boundtoTCPaddress:8000fd3

Pythonversion:3.4.3(default,Oct142015,20:37:06)[GCC4.8.4]

***Pythonthreadssupportisdisabled.Youcanenableitwith--enable-threads***

Pythonmaininterpreterinitializedat0x8b52dc0

yourserversocketlistenbacklogislimitedto100connections

yourmercyforgracefuloperationsonworkersis60seconds

mapped319920bytes(312KB)for4cores

***OperationalMODE:preforking***

WSGIapp0(mountpoint='')readyin1secondsoninterpreter0x8b52dc0pid:7158(defaultapp)

***uWSGIisrunninginmultipleinterpretermode***

spawneWSGImasterprocess(pid:7158)

spawneWSGIworker1(pid:7160,cores:1)

spawneWSGIworker2(pid:7161,cores:1)

spawneWSGIworker3(pid:7162,cores:1)

spawneWSGIworker4(pid:7163,cores:1)

复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。

复制代码

……

server{

listen8099;

server_name127.0.0.1

charsetUTF-8;

access_log/var/log/nginx/myweb_access.log;

error_log/var/log/nginx/myweb_error.log;

client_max_body_size75M;

location/{

includeuwsgi_params;

uwsgi_pass127.0.0.1:8000;

uwsgi_read_timeout2;

}

location/static{

expires30d;

autoindexon;

add_headerCache-Controlprivate;

alias/home/fnngj/pydj/myweb/static/;

}

}

……

复制代码

listen指定的是nginx代理uwsgi对外的端口号。

server_name网上大多资料都是设置的一个网址(例,wwwexamplecom),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。

在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。

includeuwsgi_params;

uwsgi_pass127.0.0.1:8000;

include必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口与myweb_uwsgi.ini配置文件中的必须一直。

现在重新启动nginx,翻看上面重启动nginx的命令。然后,访问:http//127.0.0.1:8099/

通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

django一个项目多个App项目搭建

django可以在一个项目中存在多个app,如一个大门户网站中可以包含论坛,新闻等内容,其中每一个模块称之为一个App,也可以理解为一个个独立的小型项目最终集成在一个门户网站中最终呈现给用户

本次测试以python2.7

其次分别建立相应的App模块:todo,oa,web

如图所示:

在以上的配置中导入了include对配置进行包装

同时导入了index函数,index在todo,oa,web中的views文件分别建立

同时指定了一个打开的默认首页,即webapp下的index/pre

此时运行程序,页面如图所示

如果此时输入的路径为localhost:8000/web/inex,

localhost:8000/oa/inex,

localhost:8000/toto/index将得到不同app的展现,

结语:以上就是首席CTO笔记为大家整理的关于django多个app怎么关联的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django多个app怎么关联的相关内容别忘了在本站进行查找喔。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023年辽宁高考399分能报哪些公办大学 额头有杂音是什么意思啊 ...反应也不是一般的迟钝,胆子还越来越小,叫我的声音稍大就会被吓... 2022天津理工大学各省录取分数线 ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 一个是个穿... 我是河南理科女今年考了545 报考天津理工大学一本希望大不?二本专业... ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 还有一个是个... 有个手机游戏 图标就是一个黄头发的人背着弓箭 游戏内容是两个人_百度... 我是男生从小就怕那些动物,比如青蛙,觉得一想青蛙的皮肤就全身鸡皮疙瘩... ...不是昆虫总动员,其中片段是,一群昆虫被青蛙吃进肚子里,它们在里面... ...因为我感觉左边补的不平医生就把我自己的牙齿磨掉 补完牙后,觉得上下牙齿咬合不平。感觉不舒服 补了浅龋口腔里感觉咬合不平属于正常不用管吗? 1998年7月31日的人几岁开始读高中,求告知 八戒下凡代表什么生肖 五年级下册语文有哪些课文 锦鲤过滤池发现水蛭怎样处理? 手持喷码机刚开始打字清楚,一会就喷不清楚了怎么回事,是墨的问题?_百 ... 喷码机打字间隔太长怎么调 适合化妆品的商标名字 适合化妆品的商标名字寓意好的化妆品公司名字 100以内数的平方表/立方表及心算速算方法 如何速算开立方? 立方数速算口诀 中渡镇建置沿革 洪江市洪江人口 天津市建行怎么停业了 余额宝提现限额一万怎么办 中考考不上高中有出路吗? 初二孩子成绩差,初中毕业了还有机会吗? 古代出名的大人物会打仗 TCL电视开机花屏怎么办? jquerytab选项卡(jquery实现选项卡) 9个月宝宝吃多少量水果 狼王渔轮怎么样? 赠与的房子要交纳个人所得税吗 心脏再同步化治疗(CRT)是什么 怎样辨别瓶装真伪白酒?牛栏山酒怎么辨别真假 牛栏山白酒怎么查产地?牛栏山白酒怎么分辨真假 现在进行时思维导图手抄报 现在进行时 英语手抄报 简单的 冰柜突然不冷冻了什么原因 冰柜突然不冻咋回事 2024艺术生考一本文化课要多少分 2024年五月廿九出生田姓男孩名字怎么取 绵阳五星级酒店有哪些 绵阳凯悦驾校暑假可以学车吗 绵阳站到凯悦假日酒店怎么走 怎么唱好歌曲里的戏腔 头孢克肟片饭前还是饭后吃 头孢克肟饭前吃饭后吃