将命令参数添加到本地安全HTTP服务器的Django runserver命令和handle()方法设置中

时间:2018-08-25 14:34:31

标签: django manage.py django-2.1

我将尽可能保持模糊-因为这是一个广泛的问题。

我正在Django项目中构建支付系统-能够在安全的服务器连接上运行我的项目真是太神奇了。现在,我们正进入一种更加强制的安全互联网,重点是浏览器警报等方面的站点安全性,我认为这是需要添加到Django核心管理命令中的内容。

我已经开始在应用程序内部构建此功能:

management/commands/runsecureserver.py

import os
import ssl
import sys

from django.core.servers.basehttp import WSGIServer

class SecureHTTPServer(WSGIServer):
    def __init__(self, address, handler_cls, certificate, key):
        super(SecureHTTPServer, self).__init__(address, handler_cls)
        self.socket = ssl.wrap_socket(self.socket, certfile=certificate,
                                      keyfile=key, server_side=True,
                                      ssl_version=ssl.PROTOCOL_TLSv1_2,
                                      cert_reqs=ssl.CERT_NONE)

我现在想知道-我有一个来自Django BaseCommand的{​​{1}}类的扩展类,其中添加了用于指定证书文件等的参数,一个runserver.py函数将通过添加的证书检查,端口配置等来模仿很多Django运行服务器inner_run()

inner_run()

但是,在运行时:

class Command(BaseCommand):
    def add_arguments(self, parser):
        super(Command, self).add_arguments(parser)
        parser.add_argument(**some argument here***)

我收到以下错误:

$ python manage.py runsecureserver

所以,这告诉我我需要一种NotImplementedError: subclasses of BaseCommand must provide a handle() method 方法...

问:在这种情况下,handle()方法是什么,应该怎么做?

问:只需使用Django handle()中现有的handle()方法就足够了吗?

1 个答案:

答案 0 :(得分:0)

https://docs.djangoproject.com/en/3.2/howto/custom-management-commands/

您的文件必须在 /DjangoProject/YouApp/management/commands/ 内

# custom_command.py
class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('--delta')
        parser.add_argument('--alpha')
        parser.add_argument('--universe')

    def handle(self, *args, **options):
        # argument in a dict here :
        print(options)

        # Do your stuff :)
        pass

python manage.py custom_command --universe=42