Как отправить запрос в EndPoint при запуске приложения - PullRequest
1 голос
/ 27 января 2020

Я работаю над проектом Django, в котором есть конечная точка API, которая получает запрос на публикацию и отправляет приветственное письмо зарегистрированному пользователю. В настоящее время мне нужно использовать форму для отправки этого запроса конечной точке. способ вручную прочитать электронную почту и имя из моей переменной среды и отправить запрос после первого запуска приложения? что-то вроде

EMAIL = 'try@test.com'
NAME = 'Bob'

Я уже сохранил это как переменную env

, и вот мой текущий код

@require_http_methods(["POST"])
@login_required
def add_user(request):
    if request.is_ajax():
        name = request.POST.get('name')
        email = request.POST.get('email')
        if not BlueUsers.objects.filter(user_email=email).exists():
            newuser_obj = BlueUsers.objects.create(user_name=name, user_email=email)
            conf_obj = Config.objects.first()
            if conf_obj:
                post_url = "{}/priv/create-user/".format(conf_obj.hostname)
                data = {
                    'name': newuser_obj.user_name,
                    'email': newuser_obj.user_email,
                    'redtree_user_id': newuser_obj.id
                }
                headers = {'data-auth-key': conf_obj.authentication_token}
                try:
                    response = requests.post(post_url, data=data, headers=headers)
                except:
                    response = None

Я боролся с этим

1 Ответ

0 голосов
/ 27 января 2020

Существует имя файла apps.py, которое загружает конфигурацию вашего приложения и запускает код при запуске приложения.

Ваша цель должна выполняться следующим фрагментом кода

class MyAppConfig(AppConfig):
    name = "myapp"

    def ready(self):
        # your model and other imports here

        email = os.environ.get('EMAIL')
        name = os.environ.get('NAME')

        if not BlueUsers.objects.filter(user_email=email).exists():
            newuser_obj = BlueUsers.objects.create(user_name=name, user_email=email)
            conf_obj = Config.objects.first()
            if conf_obj:
                post_url = "{}/priv/create-user/".format(conf_obj.hostname)
                data = {
                    'name': newuser_obj.user_name,
                    'email': newuser_obj.user_email,
                    'redtree_user_id': newuser_obj.id
                }
                headers = {'data-auth-key': conf_obj.authentication_token}
                try:
                    response = requests.post(post_url, data=data, headers=headers)
                except:
                    response = None

Любой лог c, который вы пишете в методе ready вашего класса AppConfig, будет выполняться один раз при каждом запуске.

...