django 12天(跨域,文件上传,下载)

跨域

什么是跨域
1.协议不同
2.端口不同
3.主机不同 如何解决跨域
1.安装django-cors-headers模块
2.在settings.py中配置
INSTALLED_APPS = [
'corsheaders'
]
3.添加中间件
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware'
]
4.允许跨域源
CORS_ORIGIN_ALLOW_ALL = True 发送请求的时候,后台都会接受
后台发现是跨域的话,并不会返回数据给前台
需要加响应头才可以返回给前台
解决方法如上

前后端分离

前台:存放html
后台:与数据库连接,校验前台数据,返回url,告知前台要返回哪一个html

后台

from django.http import JsonResponse

def login(request):
if request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'abc' and pwd == "123":
return JsonResponse({
'status': 1,
'user': user
})
return JsonResponse({
'status': 2,
'user': 0
})

前台

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
<link rel="stylesheet" href="./bs-3.3.7/css/bootstrap.css">#本地导入要加.
</head>
<body>
<h2 id="current">用户</h2>
<h1>登陆</h1>
<form action="" id="form">
用户名:<input type="text" name="user" id="user">
密码:<input type="password" name="pwd" id="pwd">
<input id='btn' type="button" value="登陆">
</form>
</body>
<script src="./bs-3.3.7/js/jquery-3.3.1.js"></script>
<script src="./bs-3.3.7/js/bootstrap.js"></script>
<script>
$('#btn').click(function () {
$.ajax({
url: 'http://127.0.0.1:8888/login/',
type: 'post',
data:{
user:$('#user').val(),
pwd:$('#pwd').val()
},
success: function (data) {
alert(data.user);
$('#current').text(data.user)
}
})
})
</script>
</html>

文件上传


前台:
<form>
<input class="file" type="file">
<button type="button" class="upload">上传</button>
</form>
<script>
$('.upload').click(function () {
var form_data = new FormData();
var file = $('.file')[0].files[0];#files是js的语法,故$('.file')[0]取到js对象
form_data.append('file', file);
$.ajax({
url: '跨域上传地址',
type: 'post',
data: form_data,
contentType: false, // 不设置内容类型
processData: false, // 不预处理数据
success: function (data) {
console.log(data)
}
})
})
</script> 后台:
def upload(request):
file = request.FILES.get('file', None)#request.FILES取文件对象,get取最后一个
#get_list取出文件列表
with open(file.name, 'wb') as f:
for line in file:
f.write(line)
return JsonResponse({
'status': 'OK',
'msg': 'upload success'
})

文件下载


前台:浏览器写好了
<a href="http://127.0.0.1:8121/download/">下载</a>
<button type="button" class="download">下载</button>
<script>
$('.download').click(function () {
location.href = 'http://127.0.0.1:8121/download/'
})
</script> 后台:
def download(request):
file = open('123.zip', 'rb')
response = FileResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="%s"' % file.name
return response

cookie

什么是cookie
cookie就是存放于浏览器客户端的键值对
原理:http请求是无状态,无连接的
-原理
是服务器产生,发给客户端浏览器,浏览器保存起来,下次发请求,会携带这个键值对到服务器
-Cookie的覆盖
先写了一个键值对,后来再写,会把原来的值覆盖掉 -登录认证装饰器,登录之后才能访问固定的页面
def login_auth(func):
def inner(request, *args, **kwargs):
# 拿到之前访问的路径
# 这个不行,因为取不到数据部分
# url=request.path
url = request.get_full_path() is_login = request.COOKIES.get('is_login')
if is_login:
res = func(request, *args, **kwargs)
return res
else:
return redirect('/login/?next=%s' % url)
return inner
-cookie的其他属性
-加盐cooke
-超时时间max_age,传一个秒的时间
-超时时间expires,传一个datatime对象
-path='/',可以设置路径,设置路径之后,path='/index/',只有访问index的时候,才会携带cookie过来
-domain 设置域名下有效domain='map.baidu.com'
-secure=False, (默认是false,设置成True浏览器将通过HTTPS来回传cookie)
-httponly=True 只能https协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖) 设置cookie (obj.set_cookie('age',18) obj为httpresponse对象)
def set_mycookie(request):
if request.method=="GET":
obj = HttpResponse('ok')
name = '周波'.encode('utf-8').decode('latin-1')#cookie设置为中文会报错,因为中文不能通过'latin-1'编码
obj.set_cookie('user',name)
obj.set_cookie('age',18)
return obj 获得cookie(request.COOKIES.get('age'))
def get_mycookie(request):
if request.method=="GET":
print(type(request.COOKIES))#字典类型
print(request.COOKIES)
age = request.COOKIES.get('age')#获得
user= request.COOKIES.get('user').encode('latin-1').decode('utf-8')#反解出中文
print(age,user)
return HttpResponse('ok') 删除cookie(obj.delete_cookie obj为httpresponse对象)
def del_mycookie(request):
if request.method=="GET":
obj = HttpResponse('ok')
obj.delete_cookie('age')
return obj

session(会议,会话)

什么是session
存放于服务器上的键值对(默认存放于数据库中)
存放格式:
session_key session_value(也就是cookie加密) max_age(过期时间) session必须跟cookie连用 为什么要用session:
解决cookie不安全的问题 获得cookie,对cookie进行加密,随机生成一个session_key,存放于数据库中,用户访问携带session_key,通过中间件,访问数据库,获得对应的session值 session的使用: 设置session(requeset.session['pwd'] = '213')
request.session['name']='lqz'
写完语句后,发生了三件事
1 生成随机字符串:dfasfasdfa
2 去数据库存储
3 写入cookie(set_cookie('sessionid','dfasfasdfa')) 因为session会在数据库存储
使用时需要先进行数据库迁移:makemigrations ,migrate
在数据库中生成 取session
name=request.session['name']
-取到cookie的随机字符串
-取session表中根据随机字符串查询,查询出session_data这个字典,然后把字典中name返回 -删除值
- 取出cookie,随机字符串,去数据库删除随机字符串是当前值的记录
request.session.delete()
-既删除cookie,又删除数据库
request.session.flush() -session其他属性
-request.session.setdefault('k1',123) # 存在则不设置 -取到随机字符串,浏览器带过来的cookie的值
print(request.session.session_key)
内部
request.COOKIES.get('sessionid')
-清空失效的session
request.session.clear_expired()
-校验sessionid是否存在
request.session.exists("session_key")

django 12天(跨域,文件上传,下载,cookie,session)的更多相关文章

  1. 利用Django REST framework快速实现文件上传下载功能

    安装包 pip install Pillow 设置 首先在settings.py中定义MEDIA_ROOT与MEDIA_URL.例如: MEDIA_ROOT = os.path.join(BASE_D ...

  2. (H5)FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...

  3. 前后端分离跨服务器文件上传-Java SpringMVC版

    近来工作上不上特别忙,加上对后台java了解一点,所以就抽时间,写了一个java版本的前后端分离的跨服务器文件上传功能,包括前后端代码. 一.Tomcat服务器部分 1.Tomcat服务器 单独复制一 ...

  4. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  5. Django文件上传下载与富文本编辑框

    django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...

  6. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  7. java+大文件上传下载

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  8. Retrofit2文件上传下载及其进度显示

    序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multip ...

  9. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

随机推荐

  1. pycharm 虚拟环境virtualenv迁移到别的机器 无法读取包的问题

    将virtualenv迁移到别的机器时,发现pycharm 总是无法读取目录下所在的包,后来经过实验终于找到了问题所在: 将自己所建的虚拟环境目录下的orig-prefix.txt中保存的路径,改成新 ...

  2. ACM学习大纲(转)

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

  3. find搜索文件系统,实时搜索

    find搜索文件系统.实时搜索 find[目录][条件][动作] [目录] 不输入目录代表当前目录 find find /etc ----------------------------------- ...

  4. MessageQueue消息队列的开启

    前言: MessageQueue消息队列形似一个保存消息的容器,发送方(例如服务程序)收集处理信息存储在队列中,接收方通过一定的协议取得队列中自己需要的信息,可以实现不同系统之间的通信: 但值得注意的 ...

  5. 能挣钱的微信JSSDK+H5混合开发

    H5喊了那么久,有些人都说不实用,有些人却利用在微信中开发H5应用赚得盆满钵满.微信JSSDK + HTML 5,让移动Web开发与微信结合轻而易举!跨平台.零成本,让大众创业变得更方便. 我觉得现在 ...

  6. Vue的十个常用指令

    1.v-text:用于更新标签包含的文本,作用和{{}}的效果一样. 2.v-html:绑定一些包含html代码的数据在视图上. 3.v-show:用来控制元素的display属性,和显示隐藏有关.v ...

  7. LPCTSTR和CString的关系

    类型理解 LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都 ...

  8. ReactiveCocoa 响应式函数编程

    简介 ReactiveCocoa(简称为RAC),RAC具有函数响应式编程特性,由Matt Diephouse开源的一个应用于iOS和OS X的新框架. 为什么使用RAC? 因为RAC具有高聚合低耦合 ...

  9. iOS  UDP 广播 AsyncSocket 用法

    因为业务需要,需要用广播发送一个字段,在iOS开发中,用到了AsynSocket. 1.定义一个属性,负责发送和接受数据 #define YX_Local_Host @"255.255.25 ...

  10. C++拾遗(二)——初窥标准库类型

    本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直 ...