暂无个人介绍
1.主从复制高可用的问题 主从复制高可用的作用 1.为master提供备份,当master宕机时,slave有完整的备份数据 2.对master实现分流,实现读写分离 但是主从架构有一个问题 1.如果master宕机,故障转移需要手动完成或者由别的工具来完成,从slave中选择一个slave做为新的...
1.什么是持久化 持久化就是将数据从掉电易失的内存同步到能够永久存储的设备上的过程 2.Redis为什么需要持久化 redis将数据保存在内存中,一旦Redis服务器被关闭,或者运行Redis服务的主机本身被关闭的话,储存在内存里面的数据就会丢失 如果仅仅将redis用作缓存的话,那么这种数据丢失带...
1.bitmap位图 1.1 bitmap位图的概念 首先来看一个例子,字符串big, 字母b的ASCII码为98,转换成二进制为 01100010 字母i的ASCII码为105,转换成二进制为 01101001 字母g的ASCII码为103,转换成二进制为 01100111 如果在Redis中,设...
1.慢查询 1.1 慢查询的生命周期 步骤一:client通过网络向Redis发送一条命令 步骤二:由于Redis是单线程应用,可以把Redis想像成一个队列,client执行的所有命令都在排队等着server端执行 步骤三:Redis服务端按顺序执行命令 步骤四:server端把命令结果通过网络返...
1.列表类型 1.1 列表数据结构 左边为key,是字符串类型 右边为value,是一个有序的队列,与python的列表结构相同 可以在Redis中对列表的value进行如下操作 从左边添加元素 从右边添加元素 从左边删除元素 从右边删除元素 计算列表长度 删除列表中指定元素 从列表中获取子列表元素 可以按照索引来获取指定元素 1.
1.哈希类型键值结构 哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value 其中field部分代表属性,value代表属性对应的值 上面的图里,user:1:info为key,name,age,Date为user这个key的一些属性,value是...
1.Redis字符串结构 对于Redis来说,所有的key都是字符串,其value可以是string,list,hash,set,zset 比如下面的 键值对的value还可以更加复杂,比如可以是json格式,xml格式,序列化等 字符串类型的value的长度不能大于512MB。
1.通用API 1.1 keys命令和dbsize命令 keys * 遍历所有key keys [pattern] 遍历模式下所有的key dbsize 计算Redis中所有key的总数 例子: 127.
1.csrf原理 csrf要求发送post,put或delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请求时携带上次分配的随机字符串到服务端进行校验 2.Django中的CSRF中间件 首先,我们知道Django中间件作用于整个项目。
1.什么是事务 数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,一组事务中的SQL语句要不全部执行成功功;如果其中某一条执行失败,则这组SQL语句中已经执行的语句会回滚到这组SQL语句执行之前的状态。
1.什么是触发器 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行 它比数据库本身标准的功能有更精细和更复杂的数据控制能力 2.触发器的作用: 2.1 安全性 可以基于数据库的值使用户具有操作数据库的某种权利。
1.什么是外键约束 外键约束(foreign key)就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强。 关于数据表的完整性和关连性,可以举个例子 有二张表,一张是用户表,一张是订单表: 1.如果我删除了用户表里的用户,那么订单表里面跟这个用户有关的数据,就成了无头数据了,不完整了。
1.什么是索引 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 更通俗的说,数据库索引好比是一本书前面的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。
## 源码剖析Django REST framework的认证方式 由Django的CBV模式流程,可以知道在`url匹配完成后,会执行自定义的类中的as_view方法`。 如果自定义的类中没有定义`as_view方法`,根据面向对象中类的继承可以知道,则`会执行其父类View中的as_view方法` `在Django的View的as_view方法中,又会调用dispatch方法`。
Django CBV模式的源码解析 通常来说,http请求的本质就是基于Socket Django的视图函数,可以基于FBV模式,也可以基于CBV模式。 基于FBV的模式就是在Django的路由映射表里进行url和视图函数的关联,而基于CBV的模式则是在views.
在python中,一切皆对象,应该怎么理解呢?? 先来看几个例子: [root@localhost ~]# python3 Python 3.6.3rc1 (default, Feb 26 2018, 22:34:25) [GCC 4.
1.pip安装virtualenvwrapper [root@localhost ~]# pip install virtualenvwrapper # 安装virtualenvwrapper [root@localhost ~]# pip list | grep virtualenvwrapper virtualenvwrapper (4.
虚拟机里的MariaDB忘记密码了,连接不上,只能重置MariaDB的密码,步骤参考网络 [root@localhost ~]# mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'l...
1.为什么要定义MySQL数据类型 定义MySQL数据类型其实就是为了对数据进行分类,实现对不同的分类进行不同的处理 1、使系统能够根据数据类型来操作数据。 2、预防数据运算时出错。例如,通过强大的数据分类把每个类型不特定的行为联系在一起,执行这些行为时,数据分类可以预防错误。
1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = StringField( label="角色名称", va...
1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登录控制装饰器和权限控制装饰器同时装饰 @admin.
1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): title = StringField( label="预告标题", ...
1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm): title = StringField( label="片名", validat...
1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf import FlaskForm from wtforms import StringField, ...
后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧显示管理菜单 管理菜单包括控制面板,标签管理,电影管理,预告管理,会员管理,评论管理,收藏管理...
会员中心页面,如下图所示 用户登录后,修改密码页面,如下图所示 用户查看自己的评论页面,如下图所示 用户查看自己的登录日志页面,如下图所示 用户查看自己收藏的电影的页面,如下图所示 1. 定义用户主页面左侧部分 在上面的图片里,可以看到,整个页面的顶部和左侧都是一样的 在之前,已经把顶部部...
页面完成后的最终布局 电影视频网站首页面 会员登录页面 会员注册页面 点击退出和会员按钮,直接进入会员登录页面 视频播放页面 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.
1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create database movie 3.
1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定义全局上下文处理器,Jinja2语法,包含,继承,定义宏 4.
做为python web开发领域的一员,flask跟Django在很多地方用法以都是相似的,比如flask的模板 模板就是服务器端的页面,在模板中可以使用服务端的语法进行输出控制 1.模板的工作原理 在视图函数中,通过render_template方法返回一个页面,然后通过Jinja2语法来进行渲染...
在使用flask定义路由完成文件上传时,定义upload视图函数 from flask import Flask, render_template from werkzeug.utils import secure_filename import os app = Flask(__name__) app.
当我们新建一个flask项目时,pycharm通常已经为项目定义了一个基本路由 @app.route('/') def hello_world(): return 'Hello World!' 此时在浏览器中输入地址http://127.
在flask里,我们常在主文件中定义某些配置,比如: app.debug = True app.secret_key = 'helloworld!!' 实际上,flask中默认可以进行可选的配置项有很多。
整个页面的文件结构如下图所示: html部分代码: 旋转木马轮播图 ...
1.创建数组的三种方式: 1.1 var 数组名=[元素1,元素2,元素3...]; 例如: var arr1=[1,2,3,4]; 1.2 var 数组名=new Array(元素1,元素2,元素3.
三元表达式 在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子 if x > y: print("the max is x") else: print("the max is y") 三元表达式的语法为: True if expression else False 现在可以...
先来看一个例子 def foo(): print("starting...") while True: res = yield print("res:",res) g = foo() next(g) 在上面的例子里,因为foo函数中有yield关键字,所以foo()函数的执行结果g是一个生成器,此时可以使用next(g)或者g.
在前面的学习过程中,我们知道,迭代器有两个好处: 一是不依赖索引的统一的迭代方法 二是惰性计算,节省内存 但是迭代器也有自己的显著的缺点,那就是 不如按照索引取值方便 一次性,只能向后取值,不能向前取值 所以我们还需要学习另外一种对象,那已经生成器 1.
什么是迭代器 顾名思义,就是更新换代的意思 python中的迭代器就是根据上一个结果生成下一个结果,一直循环往复不断重复的过程 迭代器有两个特点: 1.不断重复同一个过程 2.根据上一个结果生成下一个结果 迭代器的定义 先来看两个例子 代码一: while True: cmd = input("input your command: ").
以前用装饰器,都是定义好了装饰器后,使用@装饰器名的方法写入被装饰函数的正上方 在这里,定义的装饰器都是没有参数的 在定义装饰器的函数的时候,没有在括号里定义参数,这就叫做无参装饰器 既然有无参装饰器,那么当然也就会有有参装饰器 有参装饰器的定义和使用 定义一个普通的装饰器 db_path = "db.
1.开放封闭原则 简单来说,就是对扩展开放,对修改封闭 在面向对象的编程方式中,经常会定义各种函数。 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函数的定义阶段代码被修改,受到影响的地方就会有很多,此时很容易因为一个小地方的修改而影响整套系统的崩溃, 所以对于现代程序开发行业来说,一套系统一旦上线,系统的源代码就一定不能够再改动了。
1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello world in foo") def bar(): print("hello world in bar") 此时我们调用foo函数,执行结果会是什么样子的呢?? hello world in foo 结果如上所示,只会执行foo函数的第一层函数,bar函数是不会被执行的。
首先,我们需要知道一个概念:应用程序是不能直接对电脑硬件进行操作的 在操作系统中,操作系统对外提供了文件系统,硬盘上的文件都由文件系统进行资源管理, 读写硬盘是一种硬件操作,所以我们要想进行文件操作,就必须通过文件系统这个接口来进行文件操作 因此 我们要想进行文件读写等操作,就必须先向操作系统发起系...
单例模式是一种常用的软件设计模式. 在单例模式的核心结构中,只包含一个被称为单例类的特殊类. 通过单例模式可以保证系统中一个类只有一个实例,而且这个实例可以轻易被外界访问,方便控制实例对象的个数以节约系统资源.
1.let ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量只在let命令所在的代码块内有效 新建index.html,文件内容为 { var a = 12; } console.log(a); 从console中可以打印出a的值 在ES6中,使用let声明a的值,然后再次打印a的值,会报错 { let a = 12; } console.log(a); 报错如下所示, 上面两个例子中,分别用let和var声明了两个变量。
学习Django的时候知道,在Django请求的生命周期中,请求经过WSGI和中间件到达路由,不管是FBV还是CBV都会先执行View视图函数中的dispatch方法 REST framework是基于Django的API框架,REST framework采用的是CBV的请求模式.
1.REST framework版本控制的流程分析 1.1 determine_version方法的执行流程 首先,请求到达REST framework的CBV,执行CBV中的dispatch方法再次封装完成request后,执行initial方法.
Django REST framework是一个基于Django的框架,REST framework又是怎么反向生成url的呢?? 在前面的例子中,知道在REST framework中有6种版本控制的方式,进入任意一种版本控制的源码中, class QueryParameterVersioning(...
基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm class MyModelForm(ModelForm): class Meta: model=models.