一、ajax

  ajax(Asynchronous JavaScript And XML):异步JavaScript和XML,即使用JavaScript语句与服务器进行异步交互,传输的数据为XML(也可以是json数据)。实际上就是在JavaScript语句里用ajax可以向服务器发送请求。

  两大特点:

  1,异步交互

  2,页面局部刷新

  语法:

基于jQuery:
<script>
$('.cc').click(function(){ #当我们点击‘.cc’这个类的时候就会触发ajax请求
$.ajax({
url:'/name/', #请求的路径
type:'post', #请求的方式
data:{csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val(),user:$('[name="user"]').val()}, #请求的数据
success:function (data) { #这是请求成功后的回调函数
if (data.name){
$('.c1').html('用户名已存在');
$('.login').addClass('hide')
}
}
})
});
</script>

  1,基于ajax请求的注册页面

  1.1 register.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/bootstrap.css">
<script src="/static/jquery-3.3.1.js"></script>
<script src="/static/js/bootstrap.js"></script>
</head>
<body>
{% csrf_token %}
<div class="container">
{% csrf_token %}
<div class="row">
<div class="col-md-5">
<div style="color: blue;font-size: 20px">注册页面</div>
<div>
名字 <input type="text" name="user" class="form-control"><span class="c1" style="color: red"></span>
</div>
<div >
密码 <input type="password" name="pwd" class="form-control"><span class="c2" style="color: red"></span>
</div>
<button class="register">注册</button>
</div>
</div>
</div>
<script>
$('[name="user"]').focus(function () {
$('.c1').html('');
$('.register').removeClass('hide')
});
$('[name="pwd"]').focus(function () {
$('.c2').html('');
$('.register').removeClass('hide')
});
$('[name="user"]').blur(function () {
$.ajax({
url:'/name/',
type:'post',
data:{csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val(),user:$('[name="user"]').val()},
success:function (data) {
if (data.name){
$('.c1').html('用户名已存在');
$('.register').addClass('hide')
}
}
})
});
$('[name="pwd"]').blur(function () {
var pwd=$(this).val();
if (pwd.length < 10){
$('.c2').html('长度小于10');
$('.register').addClass('hide')
}
});
$('.register').click(function () {
var name = $('[name="user"]').val();
var pw = $('[name="pwd"]').val();
$.ajax({
url: '/registr/',
type: 'post',
data: {csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val(), user: name, pwd: pw},
success: function (data) {
if (data.state) {
location.href = '/login/'
}
else {
$('p').html('注册不成功')
}
}
})
})
</script>
</body>

  1.2 views.py

def registr(request):
if request.method=='GET':
return render(request, 'registr.html')
else:
dic={'state':None}
name=request.POST.get('user')
pwd=request.POST.get('pwd')
obj=UserInfo.objects.create(name=name,pwd=pwd)
if obj:
dic['state']=True
return JsonResponse(dic) def name(request):
dic={'name':None}
name=request.POST.get('user')
obj=UserInfo.objects.filter(name=name).first()
if obj :
dic['name']=True
return JsonResponse(dic)

  1.3 呈现出来的页面

  当我们在名字栏输入数据后并且失去焦点后,就会触发一个ajax请求,它会把写在名字栏的数据发到服务器,服务器从数据库判断是否用户名已经存在,然后给ajax返回一个结果。这整个过程中,页面是不会刷新的。只是通过JavaScript在页面上添加节点而已

  二、文件上传

  1,请求头contentType:指的请求体的打包方式,总共有三种类型

  1.1 application/x-www-form-urlencoded

  这是post请求方式最常见的打包方式,如果不进行设置,都会默认这种打包方式。浏览器的原生form表单,如果不设置enctype属性,就默认这种方式打包数据。

user=alex&pwd=123    这就是这种方式打包后的数据结构

  1.2 multipart/from-data

  基于form表单上传文件,就必须让form表单的enctype等于multipart/form-data

  基于ajax上传文件时,我们就要用到Formdata类

$('.submit').click(function () {
var formdata=new FormData();
formdata.append('file',$('.file')[0].files[0]); #插入上传文件的内容
$.ajax({
url:'/file/',
type:'post',
contentType:false, #这一句和下一句是必须加上的
processData:false,
data:formdata,
success:function (data) {
$('.c1').html(data)
}
})
})

  1.3 application/json

  在用ajax请求时,可以把contentType改成json,但此时的数据类型就必须json数据类型

如果不用Json类型打包的话,ajax也会默认urlencoded模式打包,数据书写格式为:
data:{user:'hh',pwd:123}
但当设置contentType='json',此时数据打包方式就变了,数据必须是json格式,所以现在该如下面这样写
data:JSON.strinigfy({user:'hh',pwd:123})

  2,基于form表单的文件上传

  2.1 HTML文件

<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<input type="submit">
</form>

  2.2 视图

def file(request):
if request.method=='GET':
return render(request,'file.html')
else:
file_obj=request.FILES.get('file')
name=file_obj.name
with open(os.path.join('imgs',name),'wb') as f:
for line in file_obj:
f.write(line)
return HttpResponse('上传成功')

  3,基于ajax的文件上传

  3.1 HTML文件

 <input type="file" class="file">
<input type="button" class="submit" value="submit">
<p class="c1"></p>
<script>
$('.submit').click(function () {
var formdata=new FormData();
formdata.append('file',$('.file')[0].files[0]);
$.ajax({
url:'/file/',
type:'post',
contentType:false,
processData:false,
data:formdata,
success:function (data) {
$('.c1').html(data)
}
})
})
</script>

  3.2 视图

def file(request):
if request.method=='GET':
return render(request,'file.html')
else:
file_obj=request.FILES.get('file')
name=file_obj.name
with open(os.path.join('imgs',name),'wb') as f:
for line in file_obj:
f.write(line)
return HttpResponse('上传成功')

ajax与文件上传的更多相关文章

  1. ajax提交表单、ajax实现文件上传

    ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...

  2. Ajax 与文件上传

    一 Ajax篇 1 ajax简介(Asynchronous Javascript And XML) 异步,Js,XML,即使用Javascript语言与服务器进行异步交互,传输的数据为xml(可扩展标 ...

  3. 基于 Django的Ajax实现 文件上传

    ---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...

  4. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  5. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuer ...

  7. Django学习笔记之Ajax与文件上传

      Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  8. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  9. ajax异步文件上传和进度条

    一.ajax异步文件上传 之前有说过在form表单内的文件上传,但是会刷新页面,下面就来实现不刷新页面的异步文件上传 <div class="uploding_div"> ...

随机推荐

  1. win7访问局域网总提示用户名密码错误解决方案

    win7访问局域网总提示用户名密码错误解决方案 1.点击开始-在搜索栏输入:secpol.msc(或者直接按下win+r键,输入secpol.msc),打开本地安全策略. 2.找到“安全设置”的“本地 ...

  2. Maven学习 三 Maven与Eclipse结合使用

    一检查是否已经集成了Maven 现在的Eclipse一般都是集成了Maven,如果确定集成开发工具是否集成了Maven, Windows->preferences->Maven,查看是否已 ...

  3. 利用python监测linux上的服务(简单实现服务宕掉自动发送邮件)

    python 这里用到了四个python 模块 : import time (时间模块) import re (正则模块) import socket (监测端口模块)import yagmail ( ...

  4. html 2

    一.列表 信息资源的一种展示形式 二.列表的分类 1.有序列表 <ol> <li>列表项1</li> <li>列表项2</li> </ ...

  5. MySQL导入SQL语句报错 : MySQL server has gone away (已解决)

    MySQL server has gone away 解决的方法其实很简单,我相信也有很多人遇到了这个问题.比如DZ论坛,安装好服务器,但是清空缓存等操作数据库的动作,运行时间稍长就会出现 MySQL ...

  6. docker知识点杂记

    最近重新梳理了一下docker的一些基本知识,简单做了下总结.以后会逐步补充. 1.查看系统内核版本,需要3.10以上 $ uname -r 2.下载docker 说明:centos安装docker比 ...

  7. .NET Core微服务之路:让我们对上一个Demo通讯进行修改,完成RPC通讯

    最近一段时间有些事情耽搁了更新,抱歉各位了. 上一篇我们简单的介绍了DotNetty通信框架,并简单的介绍了基于DotNetty实现了回路(Echo)通信过程. 我们来回忆一下上一个项目的整个流程: ...

  8. Django orm 实现批量插入数据

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  9. java之LinkedList详细介绍

    1 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作.Linke ...

  10. poj3281构图题

    题目大意:有F种食物,D种饮料N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份)一种食物被一头牛吃了之后,其余牛就不能吃了第一行有N,F,D三个整数接着2-N+1行代表第i头牛,前面两个整数是Fi ...