<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Passerby_one的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Passerby_one</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Passerby_one]]></copyright><item><title><![CDATA[Reids限流]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109629019</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109629019</guid><author>Passerby_one</author><pubDate>Wed, 11 Nov 2020 19:11:22 +0800</pubDate><description><![CDATA[前言：
“限流”顾名思义就是限制流量，它也是保护高并发系统三个法宝之一（保护高并发三种方式：缓存、
降级、限流）,我们都知道服务器的处理能力是有一定上限的，如果超出这个上限继续把请求放进来，
可能会发生很多不可预料的麻烦事的。通过限流可以在超出我们预先设置的请求量最大值就让剩余的
请求排队或者拒绝服务，这样就可以让系统在扛不住高并发的情况下做到"有损服务"而不是导致服务
器崩掉彻底无法服务。
举个例子：最近华为新手机mate40上架发行，由于手机发行的数量有限，市场黄牛过多存货抬高价
格的情况。华为官方为了]]></description><category></category></item><item><title><![CDATA[Celery和borker]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109586091</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109586091</guid><author>Passerby_one</author><pubDate>Mon, 09 Nov 2020 20:51:31 +0800</pubDate><description><![CDATA[Celery
Celery是一个异步任务的调度工具
Celery 是 Distributed Task Queue，分布式任务队列，分布式决定了可以有多个 worker 的存在，队列表示其是异步操作，即存在一个产生任务提出需求的工头，和一群等着被分配工作的码农。
在 Python 中定义 Celery 的时候，我们要引入Broker，中文翻译过来就是“中间人”的意思，在这里 Broker 起到一个中间人的角色。在工头提出任务的时候，把所有的任务放到 Broker 里面，在 Broker 的另外一头，一群码农]]></description><category></category></item><item><title><![CDATA[mysql无法连接navicat]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109586028</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109586028</guid><author>Passerby_one</author><pubDate>Mon, 09 Nov 2020 20:48:47 +0800</pubDate><description><![CDATA[解决mysql连接报错:1251-Client does not support authentication protocol requested by server;consider upgrading MYSQL client
使用navicat连接mysql8.0时报错：
1251-Client does not support authentication protocol requested by server;consider upgrading MYSQL client
错误原因
使用MyS]]></description><category></category></item><item><title><![CDATA[WebSocket和HTTP的区别及原理]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109586005</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109586005</guid><author>Passerby_one</author><pubDate>Mon, 09 Nov 2020 20:47:43 +0800</pubDate><description><![CDATA[HTTP协议
HTTP是单向的，客户端发送请求，服务器发送响应。举例来说，当客户端向服务器发送请求时，该请求以HTTP或HTTPS的形式发送，在接收到请求后，服务器会将响应发送给客户端。每个请求都与一个对应的响应相关联，在发送响应后客户端与服务器的连接会被关闭。每个HTTP或HTTPS请求每次都会新建与服务器的连接，并且在获得响应后，连接将自行终止。 HTTP是在TCP之上运行的无状态协议，TCP是一种面向连接的协议，它使用三向握手方法保证数据包传输的传递并重新传输丢失的数据包。
HTTP可以运行在任何可靠]]></description><category></category></item><item><title><![CDATA[ABAC权限模型的设计]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109464340</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109464340</guid><author>Passerby_one</author><pubDate>Tue, 03 Nov 2020 10:45:42 +0800</pubDate><description><![CDATA[ABAC（Attribute Base Access Control） 基于属性的权限控制
​	不同于常见的将用户通过某些方式关联到权限的方式，ABAC则是通过动态计算一个或一组属性来
​	判断是否满足某种条件来进行授权判断(可以编写简单的逻辑)。
属性通常来说分为四类：
​	用户属性（如用户年龄 用户地址）
​	环境属性（比如当前时间）
​	操作属性（增、删、改、查）
​	对象属性（比如一篇文章，又称资源属性）
例如：
​	规则：“允许所有班主任在上课时间可以自由出入校门”这条规则，其中，“班主任”是用户]]></description><category></category></item><item><title><![CDATA[逻辑删除和物理删除的区别]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109452936</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109452936</guid><author>Passerby_one</author><pubDate>Mon, 02 Nov 2020 17:02:51 +0800</pubDate><description><![CDATA[一、逻辑删除
逻辑删除的本质就是修改操作，所谓的逻辑删除并不是真的删除，
而是在表中将对应的是否删除标识(is_delete)或者说是状态字段(status)做修改操作。
比如0是未删除，1是删除。在逻辑上数据是被删除了，但是数据本身依旧存在库里。
对应的sql语句:
update 表名 set is_delete = 1 where id =1;
语句表示，在该表中将id为1的信息进行逻辑删除，那么客户端进行查询id为1的信息，
服务器就不会提供信息。如果想继续为客户端提供信息，可以把is_delete更]]></description><category></category></item><item><title><![CDATA[权限框架ACL和RBAC]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109452924</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109452924</guid><author>Passerby_one</author><pubDate>Mon, 02 Nov 2020 17:02:19 +0800</pubDate><description><![CDATA[什么是权限控制 ？
忽略特别细致的概念，比如权限能细分出很多种，功能权限、数据权限、管理权限等。
理解两个概念即可：用户和资源， 让指定的用户，只能操作指定的资源(CRUD)
ACL:Access Control List (访问控制列表)
​	ACL是最早也是最基本的一种访问控制机制
ACL原理：
​		每一项资源都有一个列表，这个列表记录的就是那些用户可以对这项资源执行CRUD中
​		的那些操作。当系统视图访问这项资源时，会首先检查这个列表中是否有关于用户的访
​		问权限，从而确定当前用户可否执行相]]></description><category></category></item><item><title><![CDATA[数据库物理外键和逻辑外键]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109452894</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109452894</guid><author>Passerby_one</author><pubDate>Mon, 02 Nov 2020 17:01:45 +0800</pubDate><description><![CDATA[物理外键性能问题
物理外键性能问题总结：
​	1.数据库需要维护外键的内部管理
​	2.外键等于把数据的一致性实物实现，全部交给数据库的服务器完成
​	3.有了外键，当做一些设计外键字段的增、删、更新操作之后，需要触发相关操作去检查，
​	   不得不消耗资源
​	4.外键还会印象需要请求对其他表内部加锁而容易出现死锁的情况
mysql的外键设计问题 虽然很多人都不推荐你在关系型数据库使用外键
但你更多听到的是mysql的，而不是SQLserver或者其他。比较公认的是，他的外键设计的 的确不是很好，
限制]]></description><category></category></item><item><title><![CDATA[python常见面试题]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109293912</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109293912</guid><author>Passerby_one</author><pubDate>Mon, 26 Oct 2020 17:16:31 +0800</pubDate><description><![CDATA[python基础
1.列表常用方法
append:用于在列表末尾追加新的对象
extend:可以在列表末尾一次性追加另一个序列的多个值
count：用来统计某个元素在序列中出现的次数
index：用来查找某个值第一个匹配项的索引的位置
insert：用于将对象插入到列表中
pop：删除列表的一个元素，默认是最后一个，并且返回元素的值
remove：用于移除列表中某个值的第一个匹配项
reverse：将列表中的元素反向存放
sort：用于在原位置对列表进行排序，改变原来的列表，让其中的元素按一定顺序排列
2.]]></description><category></category></item><item><title><![CDATA[docker和git]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109293848</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109293848</guid><author>Passerby_one</author><pubDate>Mon, 26 Oct 2020 17:13:40 +0800</pubDate><description><![CDATA[1.Docker
Docker是一个容器技术
hub：仓库 image：镜像 container：容器
Docker命令
docker load -i 'E:/Longtan/Four seas gate/eight/docker/workflow.tar’
docker info:查看版本 docker images：查看所有镜像 docker run -it -p 80:80 镜像id -it：image，tap -p：端口
80:80：左边是宿主机，右边是映射 docker stop 容器id：关闭 ]]></description><category></category></item><item><title><![CDATA[安装Docker Desktop中遇到的问题]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109286339</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109286339</guid><author>Passerby_one</author><pubDate>Mon, 26 Oct 2020 11:18:39 +0800</pubDate><description><![CDATA[安装Docker Desktop中遇到的问题
在Windows 10 中 Docker2.3.0.45519 版本 ， 启用 使用Docker Desktop 时 发现 根本无法启动， 偶尔 或者频繁的出错:
System.InvalidOperationException:
Failed to set version to docker-desktop: exit code: -1

使用 管理员方式执行 命令
 netsh winsock reset

在windows 10 中 如果 安装了 Andr]]></description><category></category></item><item><title><![CDATA[05.创建订单并生成支付链接接口]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109106201</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109106201</guid><author>Passerby_one</author><pubDate>Thu, 15 Oct 2020 21:44:44 +0800</pubDate><description><![CDATA[1.创建订单并生成支付链接接口
1.1 goods/urls.py中注册路由
urlpatterns = [
    path('getpayurl/', views.PayUrlView.as_view()), # /goods/getpayurl/
]

1.2 goods/views.py 中写视图函数
from rest_framework.views import APIView
from rest_framework.permissions import AllowAny, IsAuthenti]]></description><category></category></item><item><title><![CDATA[03.通过课程查询商品信息]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109106175</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109106175</guid><author>Passerby_one</author><pubDate>Thu, 15 Oct 2020 21:44:00 +0800</pubDate><description><![CDATA[1.只需要修改/course/sourse/1/返回的数据即可
1.1 course/serializers.py 添加商品信息序列化
# 添加显示商品字段
from goods.serializers import GoodsSerializer
class CourseDeepSerializer(CourseSerializer):
    goods_set = GoodsSerializer(many=True)
    chapters = ChaptersSerializer(many=Tru]]></description><category></category></item><item><title><![CDATA[七牛云原理与python]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109089571</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109089571</guid><author>Passerby_one</author><pubDate>Thu, 15 Oct 2020 07:17:50 +0800</pubDate><description><![CDATA[七牛云原理

七牛云后端获取token代码示例
# 获取七牛云token
class QNYTokenView(APIView):

    def get(self,request):

        from qiniu import Auth, put_file, etag
        # 需要填写你的 Access Key 和 Secret Key
        access_key = '-TYkErL-28AVgO5k8INKyoVYEl_UhdMFBn_0q'
        secr]]></description><category></category></item><item><title><![CDATA[02.创建商品APP]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109078481</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109078481</guid><author>Passerby_one</author><pubDate>Wed, 14 Oct 2020 17:02:27 +0800</pubDate><description><![CDATA[1.创建course模型
3.1 创建用户模型course
python ../manage.py startapp goods # 创建course模型

3.2 在setting.py中注册goods模型（第一步）
INSTALLED_APPS = [
    'goods.apps.GoodsConfig',
]
# 注：pycharm无法联想，需要把apps文件夹设置为源根

3.3 syl/urls.py添加路由（第二步）
urlpatterns = [
    path('goods/', in]]></description><category></category></item><item><title><![CDATA[04.支付宝支付原理]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109078419</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109078419</guid><author>Passerby_one</author><pubDate>Wed, 14 Oct 2020 17:01:56 +0800</pubDate><description><![CDATA[1.支付宝支付流程
https://www.lanqiao.cn/vip



2.新建支付宝应用
# 访问"支付宝开发平台"登录，可以访问开发者中心
https://open.alipay.com/platform/home.htm
# 可以参考"电脑网站支付" 熟悉电脑支付整体流程 
https://docs.open.alipay.com/270/105899/

2.1 第一步：创建应用（这里使用沙箱环境测试）


沙箱环境说明


线上环境需要创建应用，因为我们不是企业，没有资质，所以只能申请沙箱]]></description><category></category></item><item><title><![CDATA[01.商品模块表结构分析]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109078401</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109078401</guid><author>Passerby_one</author><pubDate>Wed, 14 Oct 2020 17:00:04 +0800</pubDate><description><![CDATA[1.表结构分析
1.1 商品模块表结构分析
from django.db import models
from utils.MyBaseModel import Base

class Goods(Base):
    GOODS_TYPE = (
        ('1', 'Vip'),
        ('2', 'Course')
    )
    CHANNEL_TYPE = (
        ('1', '普通'),
        ('2', '促销')
    )
    course ]]></description><category></category></item><item><title><![CDATA[django中的基类]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109043492</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109043492</guid><author>Passerby_one</author><pubDate>Tue, 13 Oct 2020 07:13:15 +0800</pubDate><description><![CDATA[只要继承了model.Model， 就会生成一个新的表，但是，如果在Meta方法中添加abstract=True，就不会产生新的表，而是作为一个基类存放多个表共同拥有的方法和字段等

from django.db import models


class Commen(models.Model):
    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_no.]]></description><category></category></item><item><title><![CDATA[序列化,反序列化查询]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/109030685</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/109030685</guid><author>Passerby_one</author><pubDate>Mon, 12 Oct 2020 16:34:39 +0800</pubDate><description><![CDATA[1.序列化常用字段参数
'''1. 选项参数'''
name = serializers.CharField(min_length=3,max_length=20)
max_length     # 最大长度
min_lenght     # 最小长度
allow_blank    # 是否允许为空
max_value      # 最大值
min_value      # 最小值


'''2. 通用参数'''
gp = serializers.SerializerMethodField(read_onl]]></description><category></category></item><item><title><![CDATA[08.vue绑定用户页面]]></title><link>https://blog.youkuaiyun.com/Passerby_one/article/details/108980908</link><guid>https://blog.youkuaiyun.com/Passerby_one/article/details/108980908</guid><author>Passerby_one</author><pubDate>Fri, 09 Oct 2020 16:18:43 +0800</pubDate><description><![CDATA[1.vue微博回调空页面

注：微博回调空页面为：http://127.0.0.1:8888/oauth/callback/

1.1 页面路径 components\oauth.vue
&lt;template&gt;
	&lt;div&gt;
		&lt;div v-show='visiable'&gt;
    		绑定用户
    		用户名: &lt;input
        	type="text"
        	v-model="username"
        	@blur="che]]></description><category></category></item></channel></rss>