команды управления django и пользователь - PullRequest
2 голосов
/ 10 июня 2011

Я немного использую пользовательское управление / команды django. я хотел бы предоставить доступ к своим взглядам через некоторые из этих сценариев; Однако я в затруднительном положении о том, как сделать это для аутентифицированных пользователей. Я на самом деле не использую библиотеки промежуточного программного обеспечения, поэтому все, что мне нужно, - это доступ к запросу. META ['REMOTE_USER']; Есть ли рекомендации, почему я могу подделать это? например,

def poll_view( request ):
  user = None
  if 'META' in request and 'REMOTE_USER' in request.META:
    user = request.META['REMOTE_USER']
  if not user == None:
    do_something()

и в моем сценарии управления / команды у меня есть:

class Command(BaseCommand):
  def handle(self, *args, **kwargs):
    req = ???
    poll_view( req )

Ответы [ 2 ]

1 голос
/ 20 июля 2014

Возможно, вы можете реорганизовать свое представление, чтобы извлечь только необходимые вам функции и поместить его в вспомогательный модуль.Таким образом, вы можете вызвать эту функцию как в представлении, так и в команде управления.

Пример:

-----------in a file named somewhere.py----------
def do_this():
    #do these
    pass

------------in your view-------------------------
from somewhere import do_this

def my_view(request):
  user = request.META.get('REMOTE_USER', None)
  if user:
      do_this()


-----------in your management command----------
from somewhere import do_this

class my_command(...):

    def handle(self, args*, kwargs**):
        do_this()
0 голосов
/ 10 июня 2011

Что ж, команды управления - это просто функции, поэтому вместо вызова представления из команды вызовите команду из представления и передайте запрос в качестве параметра

views.py

from managment import Command

def some_view(request):
    Command._private_function(request=request)

commands.py

class Command(...):

    def _private_function(request=None):
        if request:
            // do action with request details (i.e. coming from a view)
        else:
            // do action without (i.e. coming from command line)

    def handle(self,...):
        _private_function()

Это позволяет вам выполнять основную логику вашей административной команды из командной строки или из представления (то есть из Интернета). Вы должны быть осторожны и быть уверенным, что вы действительно хотите, чтобы человек с доступом к представлению (аутентифицированный пользователь) выполнил любое действие, которое это

...