ajax返回页面无法存储到request,解决django中form表单设置action后无法回到原页面的问题...

django中form表单设置action后,点提交按钮是跳转到action页面的,比如设置action为login,网址为192.168.1.128,跳转后便会来到192.168.1.128/login,F5刷新也会是重新提交表单对话框,无法回到原页面。

因此就要在django服务器进行重定向,具体就是

from django.shortcuts import redirect

#最后返回原页面

return redirect(url)

补充知识:Django + Ajax发送POST表单,并将返回信息回显到页面中

将表单数据发送回后端,然后处理后端返回的信息并显示在当前页面中,这里使用Ajax进行处理;

那么先看js代码:

$(document).ready(function(){

$("#save").click(function(){

$.ajax({

url:"/api/add_event/", #url

type: "POST", #提交表单的类型,相当于method="post"

dataType: "json", #dataType, 这个是请求后,返回的数据将以json格式显示

data:{"name": $("#id_name").val(), #在"#"号后面是控件id, 所以千万不要搞错了,要不然会出大事的

"limit":$("#id_limit").val(),

"address": $("#id_address").val(),

"start_time": $("#id_start_time").val(),

"status": $("#id_status").val(),

}, #Data这个地方,必须要获取数据,代表将获取到的数据发送到后端,后端再进行处理

success:function(data){

console.log(data); #调试使用

console.log(data.status); #调试使用

console.log(data.message); #调试使用

$(".text").text(data.message); #将后端返回到结果通过前端页面进行展示

}, #注意标点

}); #需要注意标点符号,如果标点符合错误了,那ajax基本上都不会执行(否则,后果很严重哦)

}); #注意标点

}); #注意标点

注意(踩过的坑):

1.contentType: "application/json" ——>加入该语句时,在后端print(request.POST)时无法获取内容,相当于后端根本拿不到数据。因此在网上搜索了解到,使用contentType: “application/json”则data只能是json字符串;不使用时contentType一般为默认的application/x-www-form-urlencoded格式, 因此如果不限制 POST格式,干脆就不写。

2. 说说“data”这里面需要注意:data:{"name", $("#id_name").val(), } 这其中id_name必须为控件的id 名称,使用其它的则不能获取的数据,这个还是得注意。

3. 标注符号,标点符号,标点符号,重要的事情说三遍,当然可以借助专门的编辑器(我主要是懒哦,哈哈)

4. $(".text").text(data.message); 回显在html中,是对后端返回的数据进行处理

那行回显在网页面上面

以下为html代码

发布会名称:

Limit:

发布会地址:

开始日期:

发布状态:

-----

True

False

现在来看一下后端的代码:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def add_event(request):

if request.is_ajax():

print(request.body)

print(request.POST)

name = request.POST.get('name', '') # 发布会名称

limit = request.POST.get('limit', '') # 限制人员

status = request.POST.get('status', '') # 发布会状态

address = request.POST.get('address', '') # 发布会地址

start_time = request.POST.get('start_time', '') # 发布会时间

if name == '' or limit == '' or status == '' or start_time == '':

return JsonResponse({'status': 10021, 'message': 'parameter error'})

# 判断发布会名称重复

result = Event.objects.filter(name=name)

if result:

return JsonResponse({'status': 10023, 'message': 'event name already exists'})

if status == '':

status = 1

try:

# Event.objects.create(id = eid, name = name, limit = limit, address = address, status = int(status), start_time=start_time)

Event.objects.create(name=name, limit=limit, address=address, status=int(status), start_time=start_time)

except ValidationError as e:

error = 'start_time format error. It must be in YYYY-MM-DD HH:MM:SS'

return JsonResponse({'status': 10024, 'message': error})

return JsonResponse({'status': 200, 'message': 'add event success'})

1、在后端处理时,我们需要加入:@csrf_exempt 标记,所以导包from django.views.decorators.csrf import csrf_exempt,否则会出现错误csrf_token错误 (403)

2、request.is_ajax()判断当前是否是使用ajax 进行表单提交

3、django request.POST / request.body

当request.POST没有值 需要考虑:

1.请求头中的: Content-Type: application/x-www-form-urlencoded request.POST中才会有值(才会去request.body中解析数据),关于Content-Type前面也提到,不写的错误,它就是默认。

request.body的请求数据

b'name=%E5%A4%BA%E5%A4%BA&limit=123‘

request.POST的数据,django已进行自动处理

QueryDict: {‘name': [‘夺夺'], ‘limit': [‘123']

以上这篇解决django中form表单设置action后无法回到原页面的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值