2

我会尽可能地含糊其辞——因为这是一个相当广泛的问题。

我正在我的 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)

我现在想知道 - 我有以下类,它BaseCommand从 Django 的类扩展而来runserver.py,我在其中添加了用于指定证书文件等的参数,该inner_run()函数将模仿许多 Django 运行服务器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()方法......

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

问:简单地使用handle()Django 的现有方法就足够了runserver.py吗?

4

1 回答 1

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

于 2021-07-21T09:18:17.533 回答