Django将任务结果发布到表单中

时间:2014-10-23 12:10:38

标签: django database sqlite task celery

我正在研究django,我已经建立了一个电子邮件爬虫,可以在基本网址的链接上找到电子邮件... 我想将结果输入到作为站点数据库的db.sqlite3文件。 我的爬虫作为芹菜任务在背景中工作。 我可以通过什么方式将任务添加到数据库的末尾。 我试图用post方法做但没有运气。

tasks.py

from celery.utils.log import get_task_logger
from .forms import CrawlUpForm
from .craw import crawler
import time
app = Celery(broker='amqp://')
@app.task
def startcraw(base,url,emails):
mylist= crawler(base,url,emails)
for em in mylist:
    new_entry = Crawler(site=base, max_links=20, max_emails=333,emails=em)
    new_entry.save()
answer= ', '.join(mylist)
return answer

我想添加sql数据库的答案(它包含电子邮件,链接和其他内容)

my views.py:

from tasks import startcraw
import time
def home(request):
    form = SignUpForm(request.POST or None)
    if form.is_valid():
    save_it= form.save(commit=False)
    save_it.save()
    messages.success(request,"Working, please wait........")
    baseurl=form.cleaned_data['site']
    maxemails=form.cleaned_data['max_emails']
    maxurl=form.cleaned_data['max_links']
    startcraw.delay(base=baseurl,url=maxurl,emails=maxemails)
    return HttpResponseRedirect('/done/')
return render_to_response("signup.html",locals(),context_instance=RequestContext(request))

models.py:

class Crawler(models.Model):
site=models.CharField(max_length=250,null=True,blank=False)
max_links=models.IntegerField(default=5,max_length=10,blank=True)
max_emails=models.IntegerField(default=5,max_length=10,blank=True)
emails = models.CharField(max_length=999999,null=True,blank=False)

我添加models.py。 在我的tasks.py中,我在mylist var中收到一封电子邮件列表 现在不关心其他变量......

1 个答案:

答案 0 :(得分:0)

你为什么要张贴它?您可以直接从Celery脚本访问模型,只需在那里创建它。