Django ждет, чтобы закончить Selenium def (), а затем возвращает страницу - как это изменить? - PullRequest
0 голосов
/ 06 сентября 2018

Для практики я написал бота, использующего Selenium для Instagram, для автоматического выполнения каких-то задач, а теперь, чтобы попрактиковаться, я хотел бы создать простую веб-страницу, с помощью которой можно управлять моим ботом (например, запуск / остановка и некоторые параметры).

Я написал базовый код на Django, он работает, но ... Обычно, когда def runInstabot(request) запускается, он ожидает завершения функций Selenium (bot.login() and bot.search()) и затем возвращает страницу. Как сделать так, чтобы он возвращал страницу, и в то же время функции Selenium будут работать или, что еще лучше, сначала вернет страницу, а затем запустится сценарий селена?

т.е. чтобы быть более точным: Я хотел бы ввести некоторые данные (пока для входа в систему и пароль, но позже немного больше), тогда он будет отображаться для следующей страницы и в то же время / или следующий bot.login() and bot.search() Запускает

views.py:
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.http import HttpResponseRedirect
from bott.forms import LoginInstagramForm
from django.views.generic.edit import FormView
from instagram.bot import Instagram
bot = Instagram()

class InstabotView(FormView):
    template_name = 'instabot.html'
    form_class = LoginInstagramForm
    success_url = '/runinstabot/'

    def form_valid(self,form):
        form.clean_instagram()
        return super().form_valid(form)

def runInstabot(request):
    print('Welcome here')
    if request.method == 'POST':
        runInstabot.login = request.POST.get('login')
        runInstabot.password = request.POST.get('password') 
        form = LoginInstagramForm(request.POST or None)
        if form.is_valid():
            bot.login(runInstabot.login, runInstabot.password)
            bot.search()
            return render(request, 'youbot.html')
    else:
        form = LoginInstagramForm()

forms.py
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User

class LoginInstagramForm(forms.Form):
    login = forms.CharField(label='login')
    password = forms.CharField(widget=forms.PasswordInput)

urls.py
from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from .views import home_page, main_page
from instagram.views import InstabotView, runInstabot

urlpatterns = [
    url(r'^$', home_page, name='home'),
    url(r'^main/', main_page, name='main'),
    url(r'^instabot/', InstabotView.as_view(), name='instabot'),
    url(r'^runinstabot/', runInstabot, name='runinstabot'),
    url(r'^admin/', admin.site.urls),
]

template:
<form action="/runinstabot/" method="post" name='btn'>
    {% csrf_token %}
    {{ form.login }}
    {{ form.password }}
    <input type="submit" value="Submit">
</form>
...