2016-01-04 2 views
0

Я пытаюсь сохранить сообщения, отправленные на номер Twilio, и поскольку они отправляются как HTTP-запрос, я думал, что могу получить значения параметров с запросом.POST, но как сохранить эти значения и сохранить их в базе данных для поиск позже? Вот код, который я придумал, но он не работает.Как сохранить request.POST значения в базе данных с Django?

views.py

@csrf_exempt 
def incoming(request): 
    from_ = request.POST.get('From') 
    body_ = request.POST.get('Body') 
    to_ = request.POST.get('To') 
    m = Message.objects.create(sentfrom=from_, content=body_, to=to_) 
    m.save() 
    twiml = '<Response><Message>Hi</Message></Response>' 
    return HttpResponse(twiml, content_type='text/xml') 

Код работы, когда я удалить все request.POST и запрос к базе данных

@csrf_exempt 
def incoming(request): 
    twiml = '<Response><Message>Hi</Message></Response>' 
    return HttpResponse(twiml, content_type='text/xml') 

Вот модель Сообщение от models.py

class Message(models.Model): 
    to = models.ForeignKey(phoneNumber, null=True) 
    sentfrom = models.CharField(max_length=15, null=True) 
    content = models.TextField(null=True) 

    def __str__(self): 
     return '%s' % (self.content) 

ответ

2

Правильный способ сохранения - иметь форму модели и вызывать is_valid и сохранять метод на них. Использование request.POST не рекомендуется, так как оно не проверяет данные. Что-то вроде:

from django import forms 
class MessageForm(forms.ModelForm): 
    class Meta: 
     model = Message 
     fields = '__all__' 

и на ваш взгляд вызывается метод сохранения MessageForm для сохранения. Также обратите внимание, что поле «в» - это внешний ключ, может быть стоит посмотреть на How do I add a Foreign Key Field to a ModelForm in Django?

+0

Звучит правильно, особенно если полезная нагрузка POST предсказуема (вы знаете, какие поля вы возвращаете). Я бы создал модель для хранения этой информации и ModelForm для проверки/очистки. Вы можете пропустить модель и просто определить форму, если вы храните эту информацию в другом месте. – Flowpoke

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