Django项目如何修改文件自动重启,远程API方法分享
项目环境:
宝塔+Nginx+Uwsgi+python项目管理器-Django
Django项目如何修改文件自动重启
想让django项目自动重启,可以采集修改py文件重启
项目/uwsgi.ini
[uwsgi]
master = true
processes = 2
threads = 2
chdir = /www/wwwroot/leiyufatong/soogor
wsgi-file= /www/wwwroot/xxxxx/soogor/config/wsgi.py
touch-reload = /www/wwwroot/xxxxx/soogor/config/restart.py#在这个路径加个一个自定义的py文件,用来形成触发
http = 0.0.0.0:8002
logto = /www/wwwroot/xxxxx/soogor/logs/error.log
chmod-socket = 660
vacuum = true
master = true
uid=www
gid=www
max-requests = 1000
#以上代码不需要修改,只须加入下方代码
py-autoreload = 1 # 代码修改后自动重启
如果只加入“py-autoreload = 1”代码,是在我们编辑文件时,发现py文件被修改了,项目就会自动重启。
但是
在实际操作当中,发现程序文件,我们最好是不修改,只能修改自己不重要的文件,所以呢,我们就建了“www/wwwroot/xxxxx/soogor/config/restart.py”文件。原以为修改这个文件会自动重启,但是实际发现,如果有程序来修改这个文件,项目不会重启,于是我们就采集用touch方法,在码中加入了
touch-reload = /www/wwwroot/xxxxx/soogor/config/restart.py#在这个路径加个一个自定义的py文件,用来形成触发
这一行,这样只要修改这个文件Uwsig就会进行重启。
这一步是实现远程重启的关系。
Django 远程API重启项目方法分享
设置好上面的方法后,我们就可以根据自己的需要来处理了
views.py
restart_DIR = os.path.join(settings.BASE_DIR, "config/restart.py")
#项目重启代码
def sysrestart():
print("项目尝试重启")
time.sleep(1)
with open(restart_DIR, "w") as fields:
now = str(datetime.datetime.now())
fields.write(now)
return JsonResponse(
{"status": 200, "message": "成功", "data": ""},
json_dumps_params={"ensure_ascii": False},
content_type="application/json; charset=utf-8",
)
#远程验证项目重启状态
def syskey(request):
if request.flag:
return JsonResponse(
{"status": 200, "message": "成功", "data": ""},
json_dumps_params={"ensure_ascii": False},
content_type="application/json; charset=utf-8",
)
else:
return JsonResponse(
{"status": 501, "message": "权限失败", "data": request.message},
json_dumps_params={"ensure_ascii": False},
content_type="application/json; charset=utf-8",
)
API/urls.py
from websetting import views as sg_setting
urlpatterns = [
path("sysrestart", sg_setting.sysrestart), # 重启项目
path("syskey", sg_setting.syskey), # 核验系统情况
]
模板html
<button class="btn btn-warning" type="button" onclick="reload()">重启项目</button>
<script type="text/javascript" >
function reload(){
//先打开弹窗
console.log('正在重启项目')
console.log('项目正在重启,正稍等...')
setTimeout(function(){$('#exampleModal').modal('show')
//然后尝试API链接,如果有key则成功
num=0
var timer = setInterval(function(){
console.log(num)
num++
$.get("/api/syskey",function(data,status){
if (status='success'){
console.log('重启成功...')
clearInterval(timer)
location.reload(true)
}
});
},1000)
},1000)
}
</script>
这样我们就可以实现在静态配置文件修改后,远程重启项目了。我们就不用上服务器来重启项目了,效率会提升不少
THE END