ajax设置cookie django,Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据...

路由系统

1、每个路由规则对应一个view中的函数

url(r'^index/(\d*)', views.index),

url(r'^manage/(?P\w*)/(?P\d*)', views.manage),

url(r'^manage/(?P\w*)', views.manage,{'id':333}),

2、根据app对路由规则进行一次分类

rl(r'^web/',include('web.urls')),

391514e1e2ea3227f8dac3061130a35e.png

f51703d5a265d8c74ffd5e1ff2fec572.png

1、每个路由规则对应一个view中的函数

e13cc4bbf81b0b9de361ed33c5ede897.png

2、根据app对路由规则进行一次分类

9197f4dad1110a272ca64fe94ebb403f.png

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

通过反射机制,可以为django开发一套动态的路由系统Demo

中间件

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图。

6c02ca8849d895695982baaff47c044c.png

中间件中可以定义四个方法,分别是:

process_request(self,request)

process_view(self, request, callback, callback_args, callback_kwargs)

process_exception(self, request, exception)

process_response(self, request, response)

自定义中间件

1、创建中间件类

0d8b98a3c39efc1c7ec58d7e767e8052.png

2、注册中间件

f6b0f2e2f0bc269ff2c79a15a7bd979d.png

3、执行顺序

4eab1d8f31d9688594ae38879b7b1340.png

4、view出错,时执行

process_exception(self, request, exception)

7e15953bfcfa713088fb220f650464b9.png

2b19bfc498134e368353ea0bac3c39ca.png

缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回,

一、配置 settings.py

1

2

3

4

5

6

7

8

9

10

CACHES= {

'default': {

'BACKEND':'django.core.cache.backends.filebased.FileBasedCache',

'LOCATION': os.path.join(BASE_DIR,'cache'),

'TIMEOUT':600,

'OPTIONS': {

'MAX_ENTRIES':1000

}

}

}

2、应用,已装饰器的方式调用

6ad34a3eb77d851de1a427d3bb40e26c.png

3、缓存

第一次刷新页面后,会得到一个用户存放缓存文件的文件夹

2fed72db0c28c13d1955cc168dbdb47d.png

b67b7252ed2a5dc24b6010c4cc7d9f57.png

15分钟内,再次刷新页面,都会从缓存文件中读取内容,页面不会再有变化。

更多参考资料:

https://docs.djangoproject.com/en/1.9/topics/cache/

http://djangobook.py3k.cn/2.0/chapter15/

Cookie和Session

一、操作Cookie

获取cookie:request.COOKIES[key]

设置cookie:response.set_cookie(key,value)

由于cookie保存在客户端的电脑上,所以,jquery也可以操作cookie。

$.cookie("list_pager_num", 30,{ path: '/' });

cookie保存时间

cookie默认在浏览器中保存 1209600秒,

设置cookie保存时间,在setting.py

SESSION_COOKIE_AGE = 10秒

关闭即失效

设置后,关闭浏览器,cookie即失效

SESSION_EXPIRE_AT_BROWSER_CLOSE = False

二、操作Session

获取session:request.session[key]

设置session:reqeust.session[key] = value

删除session:del request[key]

request.session.set_expiry(value)

* 如果value是个整数,session会在些秒数后失效。

* 如果value是个datatime或timedelta,session就会在这个时间后失效。

* 如果value是0,用户关闭浏览器session就会失效。

* 如果value是None,session会依赖全局session失效策略。

通过session来持久登陆

准备工作:

1、注释

#'django.middleware.csrf.CsrfViewMiddleware',

2、创建并同步数据库

python manage.py makemigrations

python manage.py migrate

1c2caf16edc88047b491c7537d3a4ece.png

7bff26f7edb2c999c0b79c35b7bfc2e4.png

d53bf6d47d80a49fcb38cbb9a08d2ce9.png

测试页面

直接访问 home页,会被跳转到login页面

1bd5097614513114ca7f9774c2b9ef8e.png

fc8f3001d1dd0cdf905f2ca7bba8698c.png

eb0715e6f04ea2a9599778223eacb810.png

8bad864ccf66544cc238fabd718fa188.png

用户登陆及退出登陆了状态

不同用户返回不同页面,标记用户名,并且可以注销登陆状态

4549416ed8a27e46048e0f4fa8ad858e.png

a0775ef0af71df5176885bd392afe86f.png

bbf6c66700a0f9fa67a676c4c939af7e.png

5405e35fdd30c17fb61316d66416ee63.png

42c1d8432298bdb4f407c74454a82059.png

Ajax发送数据

Ajax发送简单数据类型数据

820b73f157dd05bcb4410acc1013894b.png

5146900b275c727a875f6eb2e81edd86.png

主机端口

10.0.0.122

function AjaxSubmit(){

var host = '10.0.0.1' {#通过js获取表格中的数据#}

var port = '22'

$.ajax({

url:'/ajax_data/',

type:'POST',

data:{h:host,p:port},

success:function(arg){}

});

};

成功接收到ajax提交的数据

5bacf13d4db3bf19ea518b4110c46d72.png

Ajax发送复杂数据类型(数组、字典)

def index(request):

return render(request,'index.html')

import json

def ajax_data(request):

ret = {'status':True,'error':''}

try:

print request.POST

except Exception,e: #异常处理

ret['status'] = False

ret['error'] = str(e)

return HttpResponse(json.dumps(ret))

#默认只能发送字符串,用json把字典转换成字符穿

function AjaxSubmit(){

var user_list = [

{'username':'yangmv','age':18},

{'username':'wj','age':28},

]

$.ajax({

url:'/ajax_data/',

type:'POST',

tradition:true, {#对数据原生处理,不做加工#}

data:{data:JSON.stringify(user_list)}, {#以字符串的方式#}

success:function(arg){

//json.loads

var callback_dict = $.parseJSON(arg); {#把返回的数据json.load成字典#}

if(callback_dict.status){

alert('成功');

}else{

alert(callback_dict.error);

}

}

});

};

成功获取到字典数据。并返回执行结果

c96d677cd133a9d2f6bcd22c1ea3e2c4.png

Django上传文件的实例:

上传实例

#enctype="multipart/form-data" 是指分片上传

def upload(request):

if request.method == "POST":

#inp_post = request.POST #捕获提交来的数据

inp_file = request.FILES #捕获提交来的文件数据

get_file = inp_file.get('f1')

#print get_file.name #获取上传文件的文件名

#print get_file.size #获取上传文件的大小

f_obj = open(get_file.name,'wb')

for line in get_file.chunks():

f_obj.write(line)

f_obj.close()

return render(request,'home/upload.html')

效果:

2ad70baf9829abaf1205536540a92c2b.png

上传成功

1581ce831fb71e0522abd674d1be0748.png

Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

Django 的路由系统

Django 的路由系统   Django 的路由系统 路由层 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.ho ...

Python学习(三十一)—— Django之路由系统

转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...

Django之路由系统 Dj

Django之路由系统   Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...

Django框架----路由系统(详细)

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

Django之 路由系统

Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这 ...

Django 基础 路由系统

Django框架简介 MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图 ...

Django 的 路由系统

Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...

python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...

随机推荐

KMP匹配算法 - Number Sequence

Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M ...

R语言——七月

这两个月没有写什么代码.也没做什么大项目,基本就是对以前写的那个用ggplot2可视化数据的项目做一些增增补补,大部分技术难关都在ggplot2和R语言EXCEL处理这里解决并总结了.然后业余帮人修改 ...

c调用python

#include //python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...

初涉Linux ----------&gt&semi; Ubuntu15&period;04的安装与美化

“你玩 Linux 吗?” “什么 Linux ?” “你连 Linux 都不知道?还说是学计算机的呢...”  “干嘛要用 Linux 啊?windows多好,Linux?没兴趣” 一.  前言 ...

&lbrack;SQL&rsqb;SQL Server数据表的基础知识与增查删改

SQL Server数据表的基础知识与增查删改 由张晨辉(学生) 于19天 前发表 | 阅读94次 一.常用数据类型 .整型:bigint.int.smallint.tinyint .小数:decim ...

《第一行代码》学习笔记8-活动Activity(6)

1.返回上一个活动只需要按一下Back键,还有一个startActivityForResult()方法也是 用于启动活动,这个方法期望在活动销毁时能够返回一个结果给上一个活动. 2.startActi ...

ubuntu安装iscsi

ubuntu安装iscsi target端:apt-get install iscsitarget ubuntu安装iscsi initiator端:apt-get install open-iscs ...

从零开始学习前端开发 — 10、HTML5新标签及表单控件属性和属性值

一.html5新增标签 1.结构性标签 header 定义网页的头部 nav 定义网页的导航 footer 定义网页的底部 section 定义网页的某个区域 article 定义网页中的一篇文章 a ...

es索引管理工具-curator

elasticsearch-curator  是官方收购的开源社区周边产品,用来管理es的索引和快照. 官方文档:https://www.elastic.co/guide/en/elasticsear ...

with语句与&lowbar;&lowbar;enter&lowbar;&lowbar;&comma;&lowbar;&lowbar;exit&lowbar;&lowbar;

class Foo(object): def func(self): print("func") pass def __enter__(self): print("ent ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值