Python:Django如何通过Python脚本启动应用及配置manage.py一键启动服务
解决方案
方案1:直接在config.py中调用Django内置接口启动,无需生成bat文件
直接调用Django的管理命令执行函数,省去生成和调用批处理文件的中间步骤,代码如下:
import socket from django.core.management import execute_from_command_line # 获取本机IP host_ip = socket.gethostbyname(socket.gethostname()) # 直接执行runserver命令 execute_from_command_line(["manage.py", "runserver", f"{host_ip}:27"])
运行这个config.py文件就能直接启动服务,符合你要的调用即启动的需求,也不会生成多余的临时文件。
方案2:修改manage.py实现双击自动启动指定IP端口服务
你可以直接修改manage.py的逻辑,在没有传入参数时自动补全runserver和对应IP端口,修改后的完整manage.py代码参考如下:
#!/usr/bin/env python import os import sys import socket def get_host_ip(): try: return socket.gethostbyname(socket.gethostname()) except: # 异常时默认回环地址 return "127.0.0.1" def main(): os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc # 判断是否没有传入额外参数,是的话自动添加runserver命令和IP端口 if len(sys.argv) == 1: host_ip = get_host_ip() sys.argv.extend(["runserver", f"{host_ip}:8000"]) execute_from_command_line(sys.argv) if __name__ == '__main__': main()
注意把代码里的你的项目名.settings替换成你实际的Django配置文件路径。修改完成后,直接双击manage.py或者执行python manage.py不带任何参数,就会自动获取本机IP并在对应8000端口启动服务,原有带参数运行的逻辑不受影响。
注意:如果你的设备有多张网卡(比如同时连了WiFi和有线网),
socket.gethostbyname可能会拿到127.0.0.1或者非你预期的IP,可以根据自己的场景调整IP获取逻辑。
内容的提问来源于stack exchange,提问作者Ojas_Gupta
相关产品推荐
相关产品推荐

