上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

vue2.0-start01

发表于 2018-08-21 | 阅读次数:
字数统计: 369 | 阅读时长 ≈ 1

不够系统的学习 vue 趁着有些闲暇的时间 对此进行整理一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<div id="app">
<input type="text" placeholder="请输入" v-model="message" />
<br />

<p>data: {{ message }}</p>
</div>


<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',function () {
//vm实例
var vm = new Vue({
el: '#app', //挂载元素
data: {
message: "hello, Data"
}
});
},false);

</script>



</html>

vue的特色 数据双向绑定 数据模型model与视图view组件的自动同步

el: 挂载元素选择器
data: 代理数据
method: 定义方法

声明式渲染

声明式 只需要声明在哪里做什么 无需关心如何实现

命令式 需要具体代码表达在哪里 做什么 如何实现

vue模版

使用 Mustache 语法 插值 替换实例上的属性值

数据对象属性
class: {}, => 绑定class,和v-bind:class一样的API
style: {}, => 绑定样式,和v-bind:style一样的API
attrs: {}, => 添加行间属性
domProps: {}, => DOM元素属性
on: {}, => 绑定事件
nativeOn: {}, => 监听原生事件
directives: {}, => 自定义指令
scopedSlots: {}, => slot作用域
slot: {}, => 定义slot名称 和组件有关系,插曹
key: “key”, => 给元素添加唯一标识
ref: “ref”, => 引用信息


console.dir()

查看文档对象下所有的东西

console.time(‘test’);

console.timeEnd(‘test’);

jwt认证和python实践

发表于 2018-08-20 | 阅读次数:
字数统计: 584 | 阅读时长 ≈ 2

授权认证

几种常用的认证机制


HTTP Basic Auth 在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,通常用户名和明码会通过HTTP头传递。

在发送之前是以用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。例如,提供的用户名是Aladdin、口令是open sesame,则拼接后的结果就是Aladdin:open sesame,然后再将其用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最终将Base64编码的字符串发送出去,由接收者解码得到一个由冒号分隔的用户名和口令的字符串。

OAuth 是一个关于授权(authorization)的开放网络标准。允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。现在的版本是2.0版。

严格来说,OAuth2不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。

 (A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

jwt 认证

1.头部 包括类别和加密算法
2.载荷 payload
3.签名 signature

JWT的主要优势在于使用无状态、可扩展的方式处理应用中的用户会话。服务端可以通过内嵌的声明信息,很容易地获取用户的会话信息,而不需要去访问用户或会话的数据库。在一个分布式的面向服务的框架中,这一点非常有用。

python 后端使用 pyjwt

python-17-tips

发表于 2018-08-20 | 阅读次数:
字数统计: 232 | 阅读时长 ≈ 1

1.交换变量值

a, b = b, a

2.列表元素转字符串

"".join(a)

3.查找列表中频率最高的值

from collections import Counter


cnt = Counter(a)
cnt.most_common(3)

4.检查两个字符串是不是由相同字母不同顺序组成的

from collections import Counter


Counter(str1) == Counter(str2)

5.反转字符串

a[::-1]

reversed(a)

a.reverse()

6.反转列表

7.转置二维数组

list(zip(*original))

8.链式比较

9.链式函数调用

10.复制列表

deepcopy() 不影响原来的

copy() 浅拷贝实际上是引用 会改变

11.字典get方法

12.通过键排序字典元素

from operator import itemgetter


sorted(d.items(), key=itemgetter(1)

13.for else

14.转换列表为逗号分割符格式

15.合并字典

{**a, **b}

16.列表中最小和最大值的索引

def minIndex(lst):
    return min(range(len(lst)), key=lst.__getitem__)

17.移除列表中重复的元素

from collections import OrderedDict


OrderedDict.fromkeys(items).keys()

django-cache

发表于 2018-08-17 | 分类于 web | 阅读次数:
字数统计: 880 | 阅读时长 ≈ 3

谈一谈 django 的缓存架构

动态网站的一个基本权衡就是他们是动态的,每次一个用户请求一个页面,web服务器进行各种各样的计算,

从数据库查询到模板渲染到业务逻辑 从生成站点到访问者看到的页面。从处理开销的角度来说,相比标准的从文件系统读取文件的服务器调度,这是昂贵了不少。但是对大多数网站来说,这种开销不是什么大的问题。因为大多数的网站都是小到中型的站点,流量特别少。但是对于中到大型的网站来说,必须尽可能的减少开销,这就是缓存的由来。


缓存的意义在于把昂贵的计算结果保存起来一遍下次的访问,有缓存的站点的流程大概是这样子的:

  1. 给定一个url,检查页面是否在缓存中
  2. 如果在,返回缓存的页面
  3. 否则,生成该页面,把生成的页面保存在缓存中,返回生成的页面

django自带一个强大的缓存系统,提供不同层次的缓存粒度:你可以缓存某个视图函数的输出,或者只是某个特别难生成的部分或者是整个站点。 同时django也有类似“上流”缓存的东西,类似于Squid和基于浏览器的缓存,这类缓存是你无法直接控制但是你可以通过一些提示(比如http头 部)指定你网站的那些部分需要和如何缓存。

设置缓存

缓存系统需要少量的配置才能使用,你必须告诉系统你的缓存数据存放在哪里-数据库还是文件系统亦或是直接存在缓存中-这是一个重要的决定,直接影响到你的缓存性能;当然,一些缓存类型本来就是比其他的快,这我们无法回避。

在项目的配置文件里面可以通过CACHES配置缓存,下面我们一一讲解django中可用的缓存系统

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载从而显著提供网站性能,也是django中到目前为止最有效率的可用缓存。

Memcached作为一个后台进程运行,并分配一个指定的内存量,它所做的全是提供一个添加,检索和删除缓存中任意数据的快速接口,所有的数据都是直接存储在内存中,所以就没有了数据库或者文件系统使用的额外开销了。

在安装Memcached之后,你还需要安装一个绑定Memcached的东西,这里当做是插件之类的东西,最常用的两个是python-mencached和pylibmc。

在django中使用Memcached,你需要在配置文件里的CACHES做如下设置:

  • 根据你选择的插件,选择对应的后端(BACKEND)django.core.cache.backens.memcached.MemcachedCache或者django.core.cache.backends.memcached.PyLibMCCache
  • 给LOCATION设置ip:port值,其中ip是Memcached进程的IP地址,port是Memcached运行的端口,或者unix:path值,其中path是Memcached Unix socket文件所在的路径
1
2
3
4
5
6
7
8
9
10
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
'172.19.26.244:11213',
]
}
}

​

django or say python web architecture

发表于 2018-08-16 | 分类于 web | 阅读次数:
字数统计: 389 | 阅读时长 ≈ 1

一个django 网站 比如 著名的 disqus 它是如何支持 两个亿的月活

于2007年 创办 第三方社会化评论系统 为网站提供评论托管服务

中国目前有 多说 友言 评论啦 与之相似。


1.缓存为什么要存在

因为 用户量的增加 所做的计算越来越多 但是 应用服务器资源是有限的 数据库每秒接受请求的次数也是有限的

如何解决

减少计算量 缩短请求流程(减少网络io或者硬盘io) 在标准的流程中 任何一个环节都可以被切断, 这样请求可以直接从缓存里取到数据直接返回

2.缓存存在于哪些地方

理论上来说 缓存可以存在于请求的任意一个环节

根据数据的变化特征 将数据特征总结为一段时间内变或者不变

3.缓存的属性

  • 命中率
  • 最大元素(可以存放的最大元素的个数)
  • 清空策略(FIFO LRU)

4.缓存介质

  • 内存
  • 硬盘文件
  • 数据库

根据缓存和应用的耦合程度划分为本地和远程缓存

本地有ehcache oscache

远程有 memcached

缓存的使用是架构师的必备技能 根据数据的类型,业务的场景来确定使用何种类型的缓存。

但是没有一种缓存可以解决任何的业务场景或者数据类型,每种都各有优缺点!

1…808182…109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字