自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 nginx反向代理、负载均衡以及分布式下的session保持

一、正向代理和反向代理1、正向代理的概念  正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器。这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是 正向代理 是一个位于客户端和原始服务器(origin se

2021-01-18 20:45:10 412

原创

类nolocal 嵌套函数中修改变量的值global 用于全局修改变量的值类 :1.现有数据2.有处理数据的方法3.方法必须和数据有关联4.封装了数据和方法,方便调用5.代码复用有了列表才有循环(for)数据直接计算-------函数统计-----闭包函数(函数嵌套)(装饰器也是闭包的一种)----类闭包:内部函数调用外层函数的变量,外部函数返回内部函数的引用函数不能加工自己内部的数据,数据有自己的生命周期,在函数执行完毕后,数据要么返回,要么销毁,所以函数得加工别的数据,

2021-01-18 14:08:45 115

原创 Web接收和返回数据

1.View1.接收数据的方式:url地址传参,form表单传参,请求头传参,非表单类型传参(Non-Form Data),请求体传参(json数据)接收的数据存放的位置不同,返回的数据以字符串或者字典为准httpresponse返回的字符串jsonresponse返回的是字典,如果返回的是列表需要加safe=Falserender用于模板template的返回信息,可以带参,可以返回字符串从 POST 中获取表单数据 从 body 中获取 json 数据body 是二进制,需要用 de

2021-01-18 09:28:56 1144 3

转载 从底层代码剖析Python中的深浅拷贝

拷贝的用途拷贝就是copy,目的在于复制出一份一模一样的数据。使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不同的操作。值得一提的是绝大部分编程语言中对于copy都有深浅拷贝的概念,所以充分的理解本章节的知识也是在为今后学习其他编程语言少走弯路。在Python中,除开手动deepcopy(),其他的任何操作都是浅拷贝。Python = 赋值示例好了,废话不多说。直接进入主题,上代码:>>> # ==== = 赋值示例 =

2021-01-15 09:21:16 236

原创 项目开发流程

项⽬开发流程接⼝⽂档⼀、什么是接⼝⽂档?在项⽬开发中,web项⽬的前后端分离开发,APP开发,需要由前后端⼯程师共同定义接⼝,编写接⼝⽂档,之后⼤家都根据这个接⼝⽂档进⾏开发,到项⽬结束前都要⼀直维护。⼆、为什么要写接⼝⽂档?1、项⽬开发过程中前后端⼯程师有⼀个统⼀的⽂件进⾏沟通交流开发2、项⽬维护中或者项⽬⼈员更迭,⽅便后期⼈员查看、维护三、接⼝规范是什么?⾸先接⼝分为四部分:⽅法、uri、请求参数、返回参数⽅法url请求参数返回参数数据字典...

2021-01-15 09:07:36 184

原创 图片验证码及使用django-redis缓存

一、django缓存设置1、安装django缓存模块pip install django-redis==4.12.12、settings.py中配置缓存# 缓存配置CACHES = { # django存缓默认位置,redis 0号库 # default: 连接名称 "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTION

2021-01-15 09:06:51 213

原创 三方登录---新浪微博登陆

OAuth2.0授权认证oauth2.0是什么?OAuth(开放授权)是⼀个开放标准,允许⽤户让第三⽅应⽤访问该⽤户在某⼀⽹站上存储的私密的资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和密码提供给第三⽅应⽤。Oauth2.0的四种授权模式?https://www.cnblogs.com/Innocent-of-Dabber/p/11009811.html隐式授权模式(Implicit Grant)授权码授权模式(Authorization code Grant)密码模式(Resour

2021-01-15 09:06:26 377

原创 七牛云上传文件----前端vue实现

官方接口文档:python SDK:https://developer.qiniu.com/kodo/sdk/1242/pythonJavaScript SDK: https://developer.qiniu.com/kodo/sdk/1239/java1、安装pip install qiniunpm install qiniu-js2、准备工作申请空间及获取密钥准备3、后端获取七牛云token#######################utils/MyBaseView.py.

2021-01-15 09:05:39 504

原创 阿里云短信服务的使用-----获取短信验证码

封装发短信代码utils/MyBaseView.pyfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.request import CommonRequestfrom code2001B.settings importALY_ACCESSKEY_ID,ALY_ACCESSKEY_SECRET,QINIU_ID,QINIU_SECRET,SHAZFB_APPID,SHA_RETURN_URL,SHA_URLdef sen...

2021-01-15 09:04:47 240

原创 uwsgi+nginx部署问题解决

1.常见排查方法1.nginx错误启动报错systemctl restart nginxtail -f /var/log/nginx/error.log在浏览器中访问报错tail -f /var/log/nginx/access.logcd /home/worker/opwf_project/uwsgi_conftail -f *2.配置文件2.端口占用冲突问题端口占用(syl) root@dev:uwsgi_conf# netstat -anptu | grep

2021-01-15 09:04:18 230

原创 redis主从搭建

主从概念⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1通过主从配置可以实现读写分离master和slave都是一个redis实例(redis服务)主从配置配置主查看当前主机的ip地址ifconfig修改/etc/redis/redis.conf文件sudo vi redis.confbind 192.168.26.12

2021-01-15 09:03:08 143

原创 redis使用---python中

一、介绍redis 是一个NoSQL, 以 key、value形式存在、是基于内存,读写速度快,可持久化二、数据类型string --- 字符串list --- 列表hash --- 哈希 =》排行set --- 集合sortedset --- 有序集合 =》商品列表bitmap --- 位图1、字符串 stringset(name, value) 创建数据redis_conn.set('username', 'zhangsan')get(name) 获取数据

2021-01-14 09:05:02 271

原创 python-----------七牛云上传图片的简单实现

参考官方接口文档https://developer.qiniu.com/kodo/sdk/1242/python1、安装pip install qiniu2、准备工作注册账号登陆,个人中心获取Access Key 和 Secret Key创建对象存储空间进入空间获取测试域名3、使用python进行上传from qiniu import Auth, put_file# 获取Access Key 和 Secret Key 后,进行初始化对接:q = Auth(access_k.

2021-01-14 09:03:52 430

原创 mysql主从同步 --- 利用docker实现一主一从

MySQL主从同步1. 主从同步机制1.1 主从同步介绍和优点在多台数据服务器中,分为主服务器和从服务器。一台主服务器对应多台从服务器。主服务器只负责写入数据,从服务器只负责同步主服务器的数据,并让外部程序读取数据。主服务器写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步。应用程序可以随机读取某一台从服务器的数据,这样就可以分摊读取数据的压力。当从服务器不能工作时,整个系统将不受影响;当主服务器不能工作时,可以方便地从从服务器选举一台来当主服务器使用主从同步的优点:

2021-01-14 09:01:44 296

原创 JWT原理

1.COOKIE使用和优缺点https://www.cnblogs.com/xiaonq/p/11094480.html1.1 cookie原理:用户名+密码cookie是保存在用户浏览器端,用户名和密码等明文信息1.2 session使用原理session是存储在服务器端的一段字符串,相当于字典的key1.用户向服务器发送用户名和密码。2.验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中。3.服务器向用户返回session_id,session信息都会写

2021-01-14 09:01:10 340 1

转载 JWT的应用及配置

JWT在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token认证机制。什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外

2021-01-14 09:00:37 324

原创 django自带模板使用及语法

1 配置在工程中创建模板目录templates。在settings.py配置文件中修改TEMPLATES配置项的DIRS值:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 此处修改 'APP_DIRS': True, 'OPT

2021-01-14 08:59:55 303

原创 django中间件

中间件Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。1 中间件的定义方法定义一个中间件工厂函数,然后返回一个可以被调用的中间件。中间件工厂函数需要接收一个可以调用的get_response对象。返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个requ

2021-01-14 08:59:19 239

原创 Django--支付宝(沙箱)

django中支付宝(沙箱)简单使用python=3.6.8django=2.1.8python-alipay-sdk=2.0.1非官方支付宝 Python SDK: https://github.com/fzlee/alipay/blob/master/README.zh-hans.md#alipay.trade.page.pay沙箱环境配置1、在支付宝开放平台---->开发者中心—>开发服务---->沙箱2、RSA2密钥生成并上传参考官方地址:https://o

2021-01-14 08:58:50 477

原创 Django--虚拟环境

虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中。但是这样有一个问题,就是如果你现在用Django 1.18.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 2.1.x开发的,让你来维护,但是Django 1.18.x不再兼容Django 2.1.x的一些语法了。这时候就会碰到一个问题,我如何在我的电脑中同时拥有Django 1.18.x和Django 2.1

2021-01-14 08:57:36 256

原创 Django实现MySQL读写分离

1. 增加slave数据库的配置DATABASES = { 'default': { # 写(主机) 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'HOST': '192.168.103.158', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'itcast', # 数据库用户名 'PASSWORD': '123456', # 数据库用户密

2021-01-13 15:49:01 380

原创 Django路径问题

1.django中的三种路径1.1 操作系统文件绝对路径django 静态文件查找, 模板查找(第一种)# 去配置好的 文件夹 中查找指定的文件BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))STATIC_URL = '/static/'# /teach/shiyanlou_project/syl/apps/user/ # linux# E:\_000\XSX1.2 django 导包路径

2021-01-13 15:48:25 483

原创 Django---管理器Manager

管理器Managermodel模型可参考管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。我们在通过模型类的objects属性提供的方法操作数据库时,即是在使用一个管理器对象objects。当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,它是models.Manager类的对象。自定义管理器我们可以自定义管理器,并应用到我们的模型类上。注意:一旦为模型类指明自定义的过滤器后,Django不再生成默认管理对

2021-01-13 15:47:58 376

原创 django--ORM聚合查询及关联查询

示例模型类from django.db import models#定义图书模型类BookInfoclass BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = models.DateField(verbose_name='发布日期') bread = models.IntegerField(default=0, verbose_name

2021-01-13 15:47:17 397

原创 Django-ORM---查询集介绍

查询集 QuerySet1 概念Django的ORM中存在查询集的概念。查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):all():返回所有数据。filter():返回满足条件的数据。exclude():返回满足条件之外的数据。order_by():对结果进行排序。对查询集可以再次调用过滤器进行过滤,如BookInfo.objects.filter(bread__gt=30).order_b

2021-01-13 14:21:54 435

原创 django-celery-redis异步发邮件

Django-Celery-Redis异步发邮件python == 3.7.6django == 2.1.8celery == 4.4.7redis == 3.5.3eventlet == 0.26.1什么是celeryCelery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。 celery的特点是:简单,

2021-01-13 14:21:16 535 1

原创 Django + Uwsgi+Nginx 的生产环境部署

1.django的settings配置nginx负载均衡:https://www.cnblogs.com/xiaonq/p/10468998.htmlhttps://www.cnblogs.com/xiaonq/p/8932266.html# 1.修改配置# 正式上线关闭调试模式, 不会暴露服务器信息DEBUG = True# 2.允许的主机ALLOWED_HOSTS = ['xxx.com','127.0.0.1']# 3.前端修改接口地址(vue)http://192.168.56

2021-01-13 14:20:25 487 1

原创 装饰器实现args,kwargs参数传递

装饰器实现args,kwargs参数传递def outer(func): def inner(*args, **kwargs): print("偶数和:", sum([i for i in args if i % 2 == 0])) print("奇数和:", sum([i for i in args if i % 2 != 0])) print("偶数和:", sum([i for i in kwargs.values() if i % 2 ==

2021-01-13 14:16:38 570

原创 Cookie 和 Session

一、CookieCookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服

2021-01-13 14:11:32 473

原创 Celery介绍---手机短信异步发送

1.Celery介绍1.1 celery应⽤举例Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要⽤到异步任务,就可以考虑使⽤celery你想对100台机器执⾏⼀条批量命令,可能会花很⻓时间 ,但你不想让你的程序等着结果返回,⽽ 是给你返回⼀个任务ID,你过⼀段时间只需要拿着这个任务id就可以拿到任务执⾏结果, 在任务执 ⾏ing进⾏时,你可以继续做其它的事情Celery 在执⾏任务时需要通过⼀个消息中间件来接收和

2021-01-13 14:09:53 508 1

原创 只颠倒字母的顺序,数字不变

只颠倒字母的顺序,数字不变# 手写一个函数,将 ‘123456789,i am a student’ 作为参数输入,函数返回 ‘12346789,student a am i’,注意是单词位置颠倒,而不是字母位置颠倒def func(): a = "123456789, i am a student" list1 = a.split() list2 = list1[::-1] b = list2[-1] c = list2[0:4:1] d = " ".j

2021-01-12 11:31:35 1016

原创 栈,队列

栈,队列栈# 栈class Stack(): def __init__(self): self.list = [] def push(self, item): self.list.append(item) def pop(self): self.list.pop(-1) def peek(self): return print(self.list.pop(-1)) def is_empty(

2021-01-12 11:30:07 617

原创 排序算法

排序算法# 冒泡def maopao(alist): for i in range(len(alist)-1): for j in range(len(alist)-1-i): if alist[j]>alist[j+1]: alist[j],alist[j+1]=alist[j+1],alist[j] print(alist)maopao([3,5,2,8,1,9,4,7])# 快排def qu

2021-01-12 11:28:35 256

原创 递归实现1-100的偶数和,奇数和

递归实现1-100的偶数和,奇数和# 偶数和def func(n): if n == 0: return n return n + func(n - 2)print(func(100))# 奇数和def func(n): if n == 1: return n return n + func(n - 2)print(func(99))

2021-01-12 11:27:35 7165 2

原创 简单的Demo

简单的Demo# 打印金字塔def func(): n=int(input("请输入行数:")) for i in range(1,n+1): print(" "*(n-(i-1))+"*"*(2*i-1))func()# 打印九九乘法表for i in range(1,10): for j in range(1,i+1): print("%d*%d=%-2d"%(j,i,i*j),end=" ") print()# 倒序打印

2021-01-12 11:27:00 749 1

原创 查询字符串中元素出现的次数

查询字符串中元素出现的次数str1 = input("请输入字符串:")list1 = []for i in str1: list1.append(i)d = {}for k in list1: for v in k: if v in d: d[v] += 1 else: d[v] = 1print(d)

2021-01-12 11:25:48 1091

原创 Udp套接字

Udp套接字from socket import *udp_socket = socket(AF_INET, SOCK_DGRAM)address = ("xxx.xxx.x.xx", 端口号)udp_socket.bind(("xxx.xxx.x.xx", 端口号))date = (input("请输入你输入的内容")).encode("gbk")udp_socket.sendto(date, address)recv_date, ip_port = udp_socket.recvfrom

2021-01-12 11:24:48 659

原创 tcp客户端和服务端

tcp客户端和服务端Tcp客户端from socket import *# tcp客户端tcp_socket = socket(AF_INET,SOCK_STREAM)address = ('192.168.1.50',8080)tcp_socket.connect(address)data = input('请输入要发送的内容').encode('gbk')tcp_socket.send(data)recv_data= tcp_socket.recv(1024)print('接收到

2021-01-12 11:22:24 662

原创 集合的常用方法

集合的常用方法定义1、{}2、中间的元素用 ,3、集合里的元素 是 唯一 的 ---- 会自动去重4、是无序的创建1、 = 使用赋值运算符创建2、使用set()函数创建 --- 强转3、集合里面的元素不能是 集合/字典/列表 也就是 里面的元素不能是可变类型 集合里的元素是不可变类型4、能不能使用 {} 来创建空集合 ---- 不能5、创建空集合使用 set()demolist_1 = [1, 2, 3, 4, 5, 1, 2]# 1、去重(去除l

2021-01-12 11:20:00 801

原创 字典的常用方法

字典的常用方法定义1、以一组组键值对存在的数据的序列dcit_1 = {'name':'aa','age':16} name叫做字典的 key (键) 'aa'叫做字典的value(值)2、 {} 中间的键值对以 , 隔开特征字典的特征: 1、想获取字典的值 是通过键来获取 2、字典是无序的 --- 没有下标 3、字典是可变的 ----- 增删改查 4、字典的键是唯一的 如果一个键出现多次 会输出最

2021-01-12 11:18:13 1888

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除