2014-10-16 16 views
8

Tôi đã khuấy động thông qua phát triển phần mềm gần đây và đã có một số thành công uốn cần thiết theo ý muốn của tôi.Khó khăn với cần tây: đối tượng chức năng không có bất động sản 'chậm trễ'

Tôi đã sử dụng thành công để gửi email và chỉ cố gắng sử dụng gần như chính xác cùng một mã (sau khi khởi động lại tất cả các quy trình, v.v.) để gửi sms qua Twilio.

Tuy nhiên tôi tiếp tục nhận được vấn đề sau đây:

File "/Users/Rob/Dropbox/Python/secTrial/views.py", line 115, in send_sms 
send_sms.delay(recipients, form.text.data) 
AttributeError: 'function' object has no attribute 'delay' 

Mã của tôi là như sau:

@celery.task 
def send_email(subject, sender, recipients, text_body): 
    msg = Message(subject, sender=sender) 
    for email in recipients: 
     msg.add_recipient(email) 
    msg.body = text_body 
    mail.send(msg) 

@celery.task 
def send_sms(recipients, text_body): 
    for number in recipients: 
     print number 
     num = '+61' + str(number) 
     print num 
     msg = text_body + 'this message to' + num 
     client.messages.create(to=num, from_="+14804054823", body=msg) 

send_email.delay khi gọi từ views.py tôi hoạt động hoàn hảo, tuy nhiên send_sms.delay thất bại mỗi lần với lỗi trên.

Bất kỳ trợ giúp nào về khắc phục sự cố này đều được đánh giá cao.

- Theo yêu cầu:

@app.route('/send_mail', methods=['GET', 'POST']) 
@roles_accepted('Admin') 
def send_mail(): 
    form = SendMailForm(request.form) 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      emails = db.session.query(User.email).all() 
      list_emails = list(zip(*emails)[0]) 
      send_email.delay('Subject', '[email protected]', list_emails, form.text.data) 
    return render_template('send_generic.html', form=form) 

@app.route('/send_sms', methods=['GET', 'POST']) 
@roles_accepted('Admin') 
def send_sms(): 
    form = SendMailForm(request.form) 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      recipients = db.session.query(User.mobile).all() 
      list_recipients = filter(None, list(zip(*recipients)[0])) 
      send_sms.delay(list_recipients, form.text.data) 
    return render_template('send_generic.html', form=form, send_sms=send_sms) 

send_sms tôi cần tây chức năng trang trí được hiển thị như một nhiệm vụ đã đăng ký:

và cho cấu hình tôi chỉ đơn giản bằng cách sử dụng của khách: RabbitMQ

CELERY_BROKER_URL = 'amqp://[email protected]//' 
CELERY_RESULT_BACKEND = 'amqp://[email protected]//' 
+0

bạn có thể đăng cấu hình và chế độ xem cần tây của mình không? – ChillarAnand

Trả lời

12

Tên chế độ xem send_sms xung đột với tên tác vụ cần tây. Tên send_sms tham chiếu chế độ xem, không phải tác vụ, khi được sử dụng trong mô-đun có chứa chế độ xem.

Sử dụng tên khác để tránh ghi đè.

+0

Tôi không thể tin rằng tôi đã không thấy rằng có một vấn đề ở đó. Cảm ơn rất nhiều, đã chữa khỏi. – rob123

Các vấn đề liên quan