【发布时间】:2021-08-18 22:28:51
【问题描述】:
我想从以下代码块中返回 Json 数据,而不是呈现 html 页面,但我不知道如何实现它。我不想使用 rest_framework。当我使用render 时,页面呈现,但当我使用JsonResponse时,它会返回一个错误。
views.py
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.core.mail import send_mail
def contact_us(request):
if request.method == "POST":
name = request.POST.get("name")
email = request.POST.get("email")
title = request.POST.get("title")
message = request.POST.get("message")
data = {
"name": name,
"email": email,
"title": title,
"message": message
}
message = '''
New message: {}
From: {}
'''.format(data["message"], data['email'])
send_mail(data["title"], message, '', ['mine@gmail.com'])
return JsonResponse(request, 'contact_us/contact_us.html', safe=False)
contact.html
<form action="" method="POST" class="contact_us">
{% csrf_token %}
<div>
<div>Name</div>
<input type="text" name="name">
</div>
<div>
<div>Email</div>
<input type="text" name="email">
</div>
<div>
<div>Title</div>
<input type="text" name="title">
</div>
<div>
<div>Message</div>
<textarea name="message" cols="30" rows='10'></textarea>
</div>
<div>
<input type="submit", value="submit">
</div>
</form>
【问题讨论】:
-
你好@C-Bizz 你应该提供有问题的错误
-
如果你想传递
HTML的一些代码,你不能在JsonResponse中传递模板,你可以这样做mytags = <h1>Hello</h1>,而不是你必须像这样在你的@ 中传递它987654328@return JsonResponse({'mymessage':mytags}) -
感谢@Ankit Tiwari 的解释。在这种情况下,为了发送电子邮件而填写的表格在模板中。我该如何解决这个问题?我是否应该复制模板中的表单代码并将其粘贴到
views.py以使 JsonResponse 工作?如果是,这是一个好习惯吗?很抱歉问了很多问题,我想知道如何在不使用休息框架的情况下解决这样的情况。我想使用 React 应用程序来获取将返回的 Json 数据。 -
您想在表单提交后向用户发送电子邮件吗?
-
您可以在
def send_mail(request):get_all_data_from_frontend的视图中执行类似的操作,然后在向用户发送电子邮件后向用户发送电子邮件,您必须将成功消息返回为JsonResponse
标签: python django email frameworks