簡體   English   中英

如何在 django 中返回 Json 數據

[英]How to return Json data in django

我不想渲染 html 頁面,而是想從以下代碼塊返回 Json 數據,但我不知道如何實現它。 我不想使用 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>

如果您使用React ,則必須從前端獲取數據,您無需發送模板,您必須在React中創建包含您的聯系表單的聯系頁面

比您必須訪問視圖中的所有數據

def send_mail(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
            }
           current_site = get_current_site(request)
           mail_subject = 'My Subject.'
           message = get_template('contact_us/contact_us.html').render(data)
           to_email = request.POST.get('email')
           email = EmailMessage(
            mail_subject, message, to=[to_email]
            )
           email.content_subtype = "html"
           email.send()
     return JsonResponse({"Success":'Check your email.'})

你必須從 django.template.loader 導入這兩個東西django.template.loader import get_template from django.core.mail import EmailMessage

**注意:** 使用try: except:如果您想排除異常並使用email.send(fail_silently=False)來避免 email 錯誤,例如發送郵件失敗等。

檢查官方文檔。 更多信息https://docs.djangoproject.com/en/3.2/topics/email/#emailmessage-objects

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM