Je veux appeler un script python avec des paramètres de la vue django. Le script python est stocké dans un sous-dossier (voir l'image ci-jointe).Exécution du script python à partir de la vue django avec les paramètres
Fondamentalement, j'ai un formulaire d'entrée et je veux appeler crawl.py avec les données d'entrée de ce formulaire. Les données de formulaire doivent être stockées dans la variable "production_number" dans crawl.py.
view.py
from .forms import CustomerForm, LoginForm
from .models import Orders
from .ERPProgramm.crawl import crawlmain
def newOrders(request):
if request.method == 'POST':
form = CustomerForm(request.POST)
if form.is_valid():
formdata = form.cleaned_data['product_ID']
# call crawl.py with paramter formdata
return HttpResponseRedirect('/customer/newOrders')
crawl.py
import db
import sys
import requests
import json
from datetime import datetime
def query(resource):
r = requests.get('http://11.111.11.11:8080/webapp/api/v1/' + resource,
headers={'AuthenticationToken': '11111-11111-1111-1111-11111'}
)
return r
costumer_id = 1
production_number = formdata
d = query('productionOrder/?productionOrderNumber-eq={}'.format(production_number)).json()
session = db.Session()
costumer = session.query(db.Costumer).get(costumer_id)
if 'result' in d and len(d['result']) > 0:
r = d['result'][0]
order = db.Order()
try:
order.article_id = r['articleId']
order.amount = r['targetQuantity']
order.create_date = datetime.fromtimestamp(r['createdDate']/1000)
order.start_date = datetime.fromtimestamp(r['targetStartDate']/1000)
order.end_date = datetime.fromtimestamp(r['targetEndDate']/1000)
except NameError as e:
sys.exit('Error {}'.format(e.what()))
article_number = r['articleNumber']
d = query('article/?articleNumber-eq={}'.format(article_number)).json()
if 'result' in d and len(d['result']) > 0:
r = d['result'][0]
article_image_id = r['articleImages'][0]['id']
order.price_offer = r['articlePrices'][0]['price']
r = query('article/id/{}/downloadArticleImage?articleImageId={}'.format(order.article_id, article_image_id))
order.article_image = r.content
else:
print('No result for article with number', article_number)
costumer.orders.append(order)
session.add(costumer)
session.commit()
else:
print('No result for production order with article number', article_number)
Comment puis-je appeler crawl.py de vue django?
Je mets peut-être votre script d'exploration en fonction, avec les paramètres d'exploration comme arguments de la fonction, puis importer le 'crawler.py 'dans votre' views.py', vous pouvez appeler la fonction crawl dans votre vue 'newOrders' si votre formulaire est valide. Si le robot d'exploration prend beaucoup de temps, il se peut qu'il soit exécuté en arrière-plan afin que l'utilisateur puisse continuer à utiliser votre application, peut-être dans RabbitMQ et céleri si c'est le cas. – RHSmith159
@pap: L'exception 'NameError' n'a pas de méthode' what() '. Où trouvez-vous cela? Pourquoi attrapez-vous 'NameError'? –
Votre script 'crawl.py' n'est pas fonctionnel. Pouvez-vous le réparer et le modifier? –