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