Django之提交表单与前后端交互的方法

yizhihongxing

当我们在开发一个基于Django的Web应用时,提交表单和前后端交互是非常关键的环节,下面是提交表单与前后端交互的方法的完整攻略。

设置表单

  1. 创建一个表单类,该类必须继承自Django的forms.Formmodelforms.ModelForm,并声明表单所需要的字段。

示例代码:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
  1. 在视图函数中使用表单实例化,将数据传递给模板并渲染:

示例代码:

from django.shortcuts import render, redirect
from django.core.mail import send_mail
from django.template.loader import get_template
from django.template import Context

from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 获取表单数据
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            sender = form.cleaned_data['sender']
            cc_myself = form.cleaned_data['cc_myself']

            # 发送邮件
            recipients = ['youremail@example.com']
            if cc_myself:
                recipients.append(sender)
            send_mail(subject, message, sender, recipients)

            # 返回成功信息
            return redirect('success')
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})

前后端交互

Ajax

  1. 安装jQuery库

示例代码:

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
  1. 在模板文件中添加一个表单

示例代码:

<form method="post" id="contact-form" action="{% url 'contact' %}">
    {% csrf_token %}
    <div class="form-group">
        <label for="subject">Subject</label>
        <input type="text" name="subject" id="subject" class="form-control">
    </div>
    <div class="form-group">
        <label for="message">Message</label>
        <textarea name="message" id="message" class="form-control"></textarea>
    </div>
    <div class="form-group">
        <label for="sender">Sender</label>
        <input type="email" name="sender" id="sender" class="form-control">
    </div>
    <div class="form-check">
        <input type="checkbox" name="cc_myself" id="cc_myself" class="form-check-input">
        <label for="cc_myself" class="form-check-label">Send a copy to myself</label>
    </div>

    <button type="submit" class="btn btn-primary">Submit</button>
</form>
  1. 编写JavaScript代码,使用jQuery库通过Ajax发送表单数据:

示例代码:

$('#contact-form').submit(function(event) {
    event.preventDefault();
    var subject = $('#subject').val();
    var message = $('#message').val();
    var sender = $('#sender').val();
    var cc_myself = $('#cc_myself').is(':checked');

    $.ajax({
        url: $(this).attr('action'),
        type: "POST",
        data: {
            'subject': subject,
            'message': message,
            'sender': sender,
            'cc_myself': cc_myself,
            'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
        },
        dataType: "json",
        success: function(data) {
            alert(data.message);
        },
        error: function(xhr, errmsg, err) {
            console.log(xhr.status + ": " + xhr.responseText);
        }
    });
});

Fetch API

  1. 在视图函数中使用JSONResponse序列化表单数据

示例代码:

from django.http import JsonResponse

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 获取表单数据
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            sender = form.cleaned_data['sender']
            cc_myself = form.cleaned_data['cc_myself']

            # 发送邮件
            recipients = ['youremail@example.com']
            if cc_myself:
                recipients.append(sender)
            send_mail(subject, message, sender, recipients)

            # 返回JSONResponse
            return JsonResponse({'message': 'Your message has been sent successfully.'})
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})
  1. 编写JavaScript代码,使用Fetch API发送表单数据

示例代码:

const form = document.querySelector('#contact-form');

form.addEventListener('submit', function(event) {
    event.preventDefault();
    const subject = form.querySelector('#subject').value;
    const message = form.querySelector('#message').value;
    const sender = form.querySelector('#sender').value;
    const cc_myself = form.querySelector('#cc_myself').checked;

    fetch('{% url "contact" %}', {
        method: 'POST',
        body: JSON.stringify({
            'subject': subject,
            'message': message,
            'sender': sender,
            'cc_myself': cc_myself,
            'csrfmiddlewaretoken': document.querySelector('input[name="csrfmiddlewaretoken"]').value
        }),
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(res => res.json())
    .then(data => alert(data.message))
    .catch(error => console.log('Error:', error));
});

在完成这些步骤后,您的Django应用程序就可以支持表单提交和前后端交互了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django之提交表单与前后端交互的方法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • vue-cli使用stimulsoft.reports.js的详细教程

    下面是“vue-cli使用stimulsoft.reports.js的详细教程”的完整攻略,包含两个示例: 1. 环境准备 在开始之前,需要确认电脑已经安装了以下软件: Node.js npm Vue CLI 如果没有安装,可以到官网下载安装对应版本。安装完毕后,打开命令行工具,输入以下命令进行版本确认: node -v npm -v vue –versi…

    C 2023年5月23日
    00
  • C_936.nls 系统文件丢失或损坏的解决方法

    针对“C_936.nls 系统文件丢失或损坏的解决方法”问题,我提供如下攻略: 问题描述 在使用Windows操作系统时,可能会遇到系统提示“C_936.nls 系统文件丢失或损坏”的错误信息。该文件是Windows系统中的一个文本文件,如果该文件丢失或损坏,可能会导致某些系统功能无法正常运行。 解决方法 方法一:从备份文件中还原 如果你有系统备份文件,可以…

    C 2023年5月23日
    00
  • C语言自研定时器计划任务语法详解

    下面我将详细讲解“C语言自研定时器计划任务语法详解”的完整攻略。 概述 在C语言中,我们常常需要进行一些定时处理或者周期性任务等操作。为了方便这些操作,我们可以自研一个定时器计划任务,这个任务包含有启动和停止定时器、注册和注销任务、定时器中断处理等功能。下面我们将具体讲解这些功能的实现方法。 启动和停止定时器 启动定时器的方式如下: int timer_st…

    C 2023年5月23日
    00
  • win7开机出现“致命错误C0000034 正在更新操作XXX 共XXX个”的解决方法

    问题描述 win7开机出现“致命错误C0000034 正在更新操作XXX 共XXX个”的提示,随后无法进入系统。 原因分析 此错误通常是由于Windows更新过程中出现问题导致的。某些更新未能成功安装或配置完成,导致系统无法正常启动。 解决方法 以下是解决“致命错误C0000034 正在更新操作XXX 共XXX个”的方法: 方法1:使用系统恢复选项 关闭计算…

    C 2023年5月23日
    00
  • 自己的vscode-settings.json配置详解

    下面是关于“自己的vscode-settings.json配置详解”的详细攻略。 什么是vscode-settings.json? vscode-settings.json是VS Code配置文件,它存储了 VS Code 的所有设置选项。当你更改 VS Code 的设置选项时,实际上是修改了此 JSON 文件。通过默认的设置 UI,你无法更改的某些设置选项…

    C 2023年5月23日
    00
  • C语言 详细讲解接续符和转义符的使用

    C语言 详细讲解接续符和转义符的使用 在C语言中,接续符(\\)和转义符(\)是常用的符号。本文将详细讲解其使用。 接续符的使用 接续符是用于让一行代码换行继续写的符号,可以避免一行代码过长而难以阅读。其语法为 \,使用方式如下: // 例1:用于字符串常量中换行 char str[] = "这是一个比较长的\n字符串"; // 例2:用…

    C 2023年5月23日
    00
  • C++实现图书管理系统简易版

    C++实现图书管理系统简易版攻略 前言 图书管理系统是一种基础的管理系统,它可以帮助管理员管理图书信息和读者信息,完成借阅、归还等基本操作。本文将详细介绍如何使用C++编程实现图书管理系统的简易版。 实现步骤 1. 确定需求 在编写代码之前,需要明确所要实现的功能需求。基本需求如下: 管理员可以添加图书和删除图书 管理员可以添加读者和删除读者 读者可以查询图…

    C 2023年5月24日
    00
  • VC List Control控件如何删除选中的记录实例详解

    删除VC List Control控件中选中的记录的过程可以通过以下步骤实现: 获取选中的记录索引:可以通过List Control控件的GetNextItem函数来获取选中的记录索引。该函数的参数可以用来指定搜索的起始索引。因此,我们可以在循环中使用该函数来获取所有选中的记录索引。 示例代码: int nItem = -1; while ((nItem =…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部