在web开发中,表单提交是一个很常见的功能,在django中,使用form表单提交较为简单,需要注意在表单中
    
     
      添加{% csrf_token %}
     
    
    ,如果不想这样做,也可以在对应的view方法中添加装饰器
    
     
      @csrf_exempt
     
    
    ,强制不使用csrf认证。
   
    如果是ajax提交表单,则相对复杂一些,在ajax提交时,除了提交你的表单内容数据,还要添加一个请求头数据,
    
     
      headers:{“X-CSRFToken”:$.cookie(“csrftoken”)}
     
    
    ,$.cookie(“csrftoken”)使用了jquery的cookie框架,可以方便的获取cookie数据。如果不加上这个请求头,那么请求将会失败,且是400系列的请求异常。
   
那么废话不多说,直接上代码吧(分别演示form表单和ajax提交的情况):
urls.py:
from django.urls import path
from . import views
urlpatterns = [
    path('',views.index),
    path('add_blog',views.add_blog,name='add_blog')
]
views.py:
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, render_to_response
# Create your views here.
def index(request):
    return render(request,'index.html')
def add_blog(request):
    if request.is_ajax():
        title = request.POST.get('title')
        content = request.POST.get('content')
        data = {}
        data['status'] = '0'
        data['message'] = '传递数据成功'
        data['data'] = {'title':title,'content':content}
        return JsonResponse(data)
    else:
        title = request.POST.get('title')
        content = request.POST.get('content')
        print(title)
        print(content)
        return render(request, 'index.html', locals())
index.html:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <h1>以form方式添加博客</h1>
    <form action="{% url 'add_blog' %}" method="post">
        {% csrf_token %}
        <label>博客标题</label>
        <input type="text" name="title">
        <label>博客内容</label>
        <input type="text" name="content">
        <button  type="submit">添加</button>
    </form>
    <h4>提交的数据:title:{{ title }},content:{{ content }}</h4>
    <h1>以ajax方式添加博客</h1>
    <label>博客标题</label>
    <input type="text" id="title">
    <label>博客内容</label>
    <input type="text" id="content">
    <button type="button" id="commit_btn">添加</button>
    <div id="ajax_ret"></div>
</body>
<script src="{% static 'jquery-1.12.4.min.js' %}"></script>
<script src="{% static 'jquery.cookie.js' %}"></script>
<script>
    $("#commit_btn").click(function () {
        $.ajax({
                url:'{% url 'add_blog' %}',
                method:'post',
                data:{title:$("#title").val(),content:$('#content').val()},
                headers:{"X-CSRFToken":$.cookie("csrftoken")},
                success:function (data) {
                    $('#title').val('')
                    $('#content').val('')
                    $('#ajax_ret').html("<H4>后台返回的数据:状态码:"+data.status+",说明信息:"+data.message+",返回数据:"+data.data.title+","+data.data.content+"</H4>")
                },
                error:function (data) {
                    alert(data.status)
                }
            }
        )
    })
</script>
</html>好了,来看张页面截图吧:
    
    
   
 
版权声明:本文为kkorkk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
