2013-08-02 3 views
2

Я пытаюсь отслеживать ответы пользователей, которые отправляют «пароль» в приложение Twilio, чтобы они могли ответить на ряд вопросов. Во-первых, вероятно, лучше всего проверить, что «from_number» существует в базе данных, а затем создать нового Caller, если это не так.Проверка предыдущих SMS-отправителей Django/Twilio

В models.py:

class Callers(models.Model): 
    body = models.CharField() 
    from_number = models.CharField() 
    last_question = models.CharField(max_length=1, default="0") 

В views.py:

def HelloThere(request): 
    body = request.REQUEST.get('Body', None) 
    from_number = request.REQUEST.get("From",None) 

    if Caller.objects.filter(from_number == from_number): 
     if last_question == "0": 
      caller = Caller(message = "first question". last_question = "1") 
      caller.save() 
      return HttpResponse(str(resp)) 
     if last_question == '1': 
      # so on and so forth 
    else: 
     caller = Caller(body=body, from_number=from_number, last_question='0') 
     caller.save() 
     message = "What is the password?" 

Я не думаю, что я могу использовать request.user.is_authenticated().

/Это плохая идея иметь так много одинаковых имен полей? «Тело = Тело = Тело

ответ

0

Сначала о модели:

class Callers(models.Model): 
    body = models.CharField() 
    from_number = models.CharField() 
    last_question = models.IntegerField(default=0) # if you have more than 10 question then I guess using IntegerField is better here 

Тогда вид:

def hello_there(request): # this is a function, so use lower case with underscore for name 
    body = request.REQUEST.get('Body', None) 
    from_number = request.REQUEST.get("From",None) 

    try: 
     caller = Caller.objects.get(from_number=from_number) # using get() is better than filter here since I guess you want unique caller field in DB, right? 
    except Caller.DoesNotExist: 
     caller = None 

    if caller: 
     if caller.last_question == 0: 
      # update the caller ? 
      caller.last_question = 1 
      caller.body = 'Something' 
      caller.save() 
      # ... your code ... 
      return HttpResponse(str(resp)) 
     if last_question == 1: 
      # so on and so forth 
      # if you have repeated process here, make a function to update caller to be DRY 
    else: 
     new_caller = Caller(body=body, from_number=from_number, last_question=0) 
     new_caller.save() 
     message = "What is the password?" 

request.user.is_authenticated() только для User модели, так что вы не можете использовать это, и это. нормально использовать одно и то же имя для разных вещей, например body в вашем представлении может быть переменной или аргументом. Если вам непонятно, тогда вы можете выбрать другое имя.

Надеюсь, это поможет!

+0

двойной проверки, Caller in view.py должен быть «Callers» правильно? – theptrk

+0

Да, забыл, я спросил об этом. Просто нужно быть последовательным. Вы рок-чувак – theptrk

+0

Ага, я не заметил, что модель - это «Callers». Обычно я бы назвал модель единственной с капиталом, например «Caller», а также имя приложения множественное число и все нижние регистры, например «вызывающие». –

Смежные вопросы