Django form saving in database and send email with formspree.io
我正在寻找为我的公司设置票务服务,但是我在Django表单和Formspree.io之间遇到了一个小问题。
用户使用我的Django表单创建票证。然后,他们的票证存储在我的数据库中,我的应用程序使用
发送电子邮件至[email protected]。
当我单击
我的模型如下:
1 2 3 4 5 6 7 8 9 10 11 | class Ticket(models.Model): Etat = models.CharField(max_length = 30, choices = CHOIX_ETAT_TICKET, verbose_name="Etat du ticket") Nom = models.CharField(max_length=40, verbose_name="Nom du createur") Prenom = models.CharField(max_length=40, verbose_name="Prenom du createur") Telephone = models.CharField(max_length=20, verbose_name='Téléphone') Mail = models.CharField(max_length=40, verbose_name='Email') Objet = models.CharField(max_length=60, verbose_name='Objet du ticket') Description = models.CharField(max_length=250, verbose_name='Description du ticket') Creation = models.DateTimeField(auto_now_add=True) Utilisateur = models.CharField(max_length=100, verbose_name="Utilisateur") |
我的表单如下:
1 2 3 4 5 6 7 8 | class TicketFormulaire(forms.ModelForm): Utilisateur = forms.CharField(widget=forms.HiddenInput()) Etat = forms.CharField(widget=forms.HiddenInput()) class Meta : model = Ticket fields = ["Etat","Nom","Prenom","Telephone","Mail","Objet","Description","Utilisateur"] |
我的视图如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @login_required def Identity_Ticket(request) : if request.method == 'POST': form = TicketFormulaire(request.POST or None) if form.is_valid() : # Vérification sur la validité des données post = form.save() messages.success(request, 'Le formulaire a été enregistré !') #return HttpResponseRedirect(reverse('Home')) else: messages.error(request,"Le formulaire est invalide !") else: form = TicketFormulaire() form.fields['Utilisateur'].initial = request.user.last_name +"" + request.user.first_name form.fields['Etat'].initial = 'En attente' return render(request, 'Identity_Societe_Ticket.html', {"form" : form, }) |
最后是我的html模板:
1 2 3 4 5 6 7 8 | <h4 class="subtitle"> <span class="glyphicon glyphicon-user"></span></span> Création d'un nouveau ticket</h4> <form autocomplete="off" class ="form" method='POST' action='https://formspree.io/[email protected]'> {% csrf_token %} </br> {{ form.as_p}} </br> <input type="submit" value="Enregistrer le ticket" onclick="return confirm('Valider le formulaire ?')" /> </form> |
您是否有解决方案,以便第一次将数据保存在我的数据库中,然后发送电子邮件?
可以提供任何帮助;)
______________
更新:
______________
我的HTML文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <h4 class="subtitle"> <span class="glyphicon glyphicon-user"></span></span> New ticket</h4> <form autocomplete="off" class ="form" method='POST' action='' enctype="multipart/form-data"> {% csrf_token %} </br> {{ form.as_p}} </br> <input type="submit" onclick="return confirm('Confirm the ticket ?')" /> </form> var $TicketForm = $('#someid'); $TicketForm.submit(function(e) { e.preventDefault(); $.ajax({ url: '//formspree.io/[email protected]', method: 'POST', data: $(this).serialize(), dataType: 'json', beforeSend: function() { $TicketForm.append('Envoi du ticket en cours'); }, success: function(data) { $TicketForm.find('.alert--loading').hide(); $TicketForm.append('Le ticket a été envoyé ! '); }, error: function(err) { $TicketForm.find('.alert--loading').hide(); $TicketForm.append('Il semble y avoir une erreur'); } }); }); |
如果我没有在
好吧,您给了
表单中的参数,以便您的表单提交到formspree.io网站。保存表单后,无需使用应用程序功能URL提交表单并在django视图中进行Formspree.io处理。
编辑:
我不知道formpee.io,但我了解您的查询,
使用ajax,
的一种方法
更改为
1 | <button type="button" id="someid"> |
而不是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <input type="submit" /> $("#someid").on("click", function() { $.ajax({ url:"//formspree.io/[email protected]", method:"POST", data: {message:"hello!","extradatagoeshere":""}, dataType:"json", success:function(data) { // now submit your actual form to db by form.submit(); } }); }); |
或使用python请求库在形式为save的视图函数逻辑后发布数据,
1 2 3 4 5 6 | import requests url = 'https://formspree.io/[email protected]' data = {"yourdata":"data"} # pass a whole bunch of dict which needed to be send in data requests.post(url, data=data) |
您的操作是将数据发布到
如果您确实要执行此操作,一种方法是使用
,表格将保持原样。
希望这对您有帮助