博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
session与cookie
阅读量:6757 次
发布时间:2019-06-26

本文共 4053 字,大约阅读时间需要 13 分钟。

前后台分离开发的概念

1.前台页面运行在前台服务器上,负责页面的渲染(静态文件的加载)与转跳

2.后台代码运行在后台服务器上,负责数据的处理(提供数据请求的接口)

跨域请求数据

1.前台与后台有跨域问题,解决跨域安装django-cors-headers模块

在settings.py中配置

注册app

INSTALLED_APPS = ['corsheaders']

添加中间件

MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware'']

允许跨域源

CORS_ORIGIN_ALLOW_ALL= True

前台代码

$.ajax({

url:'http://127.0.0.1:8801/login/',

type:'post',

data:{

usr:'usr',

pwd:'pwd'}

success:function(data){

console.log(data)}

})

后台代码

def login(request):

  if request.method == 'post':

    usr = request.POST.get('usr',None)

    pwd = request.POST.get('pwd',None)

    if usr == 'abc' and pwd == '123':

      return JsonResponse({'status':'ok','usr':usr})

    return JsonResponse({'status':'error','usr',None})

文件上传

浏览器

<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];

form_data.append('file',file);

$.ajax({

url:'跨域上传地址',

type:'post',

data:form_data,

contentType:false,//不设置内容类型

processData:false,//不预处理数据

sunccess:function(data){

console.log(data)}

})

})

</script>

后台:

def upload(request):

  file = request.FILES.get('file',None)

  if file:

    with open(file.name,'wb')as f:

      for line in file:

        f.write(line)

   return JsonReponse({'status':'ok','msg':'upload success'})

 

文件下载

<a href="http://127.0.0.1:8001/download/">下载</a>

<button type="button" class="download">下载</button>

<script>

  $('.download').click(function(){

  loaction.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['Conten-Disposition'] = 'attachment;filename="%s"' %file.name

return response

cookie介绍

Django用HttpResponse对象操作Cookie

response = HttpResponse('所有的响应都是HttpResponse对象')

设置cookie:key,value与过期时间

response.set_cookie(key,value,max_age)

删除cookie:key

response.delete_cookie(key)

设置加盐cookie:key,value与盐字符串(就是简单的加密)

response.set_signed_cookie(key,value,salt)

通过response对象获取Cookie

获取key对应的value

response.COOKIES.get(key,None)

获取加盐后的key对应的value

request.get_signed_cookie(key,salt)

了解:set_cookie方法的其他参数

1.expires:过期时间,格式为字符串类型的时间

2.path:作用路径,/代表所有路径下均起作用

3.domain:作用域名

4.secure:布尔类型,浏览器是否通过HTTPS方式回传cookie

5.httponly:布尔类型,JS能否直接访问该条cookie

session介绍

1.设置session

request.session['key1']=value1

request.session['key2']=value2

过程:

1.生成一个随机字符串,作为主键

2.在sdjango_session表中插入有三个字段的一条数据

一条数据对应一个浏览器会话

session_key:主键-随机字符串

session_data:该回话拥有的所有key_value形成的大字典的加密字符串

expire_date:过期时间,默认为14天

3.往浏览器中写入一条cookie,sessionid=主键的随机字符串

2.获取session

request.session.get('key',None)

3.删除session

request.session.delete() 只删除了当前会话对应的一条记录

request.session.flush() 除了删除当前会话对应的一条记录外,还删除对应浏览器中的cookie,建议使用

4.清除django-session表中所有过期的session字段

requst.session.clear_expired()清除所有过期的Session

5.了解

request.session.session_key 获取当前会话对应的session_key

request.session.exists('session_key')判断某session_key是否存在

session的settings配置

settings.py

1.数据库存储

SESSION_ENGINE = 'django.contrib.sessions.backends.db'引擎默认

2.缓存存储

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

SESSION_CACHE_ALIAS ='default'使用的缓存别名(默认内存缓存,也可以是memcache)此处别名依赖缓存的设置

3.文件存储

SESSION_ENGINE =

'django.contrib.sessions.backends.file'

# 引擎
# SESSION_FILE_PATH = '/' # 缓存文件路径,如果为None,
则使用tempfile模块获取一个临时地址tempfile.gettempdir()
#
# 4. 缓存 + 数据库存储
# SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
#
# 5. 加密Cookie
# SESSION_ENGINE = 'django.contrib.sessions.backends
.signed_cookies' # 引擎
#
# SESSION_COOKIE_NAME = "sessionid" # cookie的key名
,值为随机字符串
# SESSION_COOKIE_PATH = "/" # 作用路径,
/代表所有路径下均起作用)
# SESSION_COOKIE_DOMAIN = None # 作用域名
# SESSION_COOKIE_SECURE = False # 布尔类型,
浏览器是否通过HTTPS方式回传cookie
# SESSION_COOKIE_HTTPONLY = True # 布尔类型,
JS能否直接访问该条cookie
# SESSION_COOKIE_AGE = 1209600 # 数据库session字段的过期时间
# SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 浏览器关闭后cookie是否过期,默认False不过期,建议True
# SESSION_SAVE_EVERY_REQUEST = False
# 每一次请求,是否更新session字段的过期时间,
默认False不更新,建议True

转载于:https://www.cnblogs.com/suncunxu/p/10519116.html

你可能感兴趣的文章
Vue.js - Day4
查看>>
mysql之用户
查看>>
053(三十五)
查看>>
AddonSU Packages now available for LineageOS 15.1
查看>>
UVa 10970 - Big Chocolate
查看>>
C# API 如何保证使用托管对象的平台调用成功
查看>>
产品新版本发布前要做那些事呢
查看>>
hdu-1114 Piggy-Bank---完全背包
查看>>
批处理基础
查看>>
Android Disable Package/Component 跳过app安装
查看>>
2.Storm集群部署及单词统计案例
查看>>
javabean,pojo,vo,dto,
查看>>
·转」linux的学习路线
查看>>
寄存器
查看>>
2008年12月在东京出差时给国内的回信
查看>>
android 环境搭建
查看>>
面试:用 Java 逆序打印链表
查看>>
Android内存优化(三)详解内存分析工具MAT
查看>>
SQL Server事务遭遇网络异常时的处理机制浅析
查看>>
Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
查看>>