<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LionLone的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LionLone</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LionLone]]></copyright><item><title><![CDATA[Python 人脸离线识别SDK(Baidu)]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123701276</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123701276</guid><author>LionLone</author><pubDate>Thu, 24 Mar 2022 06:59:34 +0800</pubDate><description><![CDATA[python 调用 java版本的 百度离线识别SDK]]></description><category></category></item><item><title><![CDATA[基于redis实现的数字验证码生成核验]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123462332</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123462332</guid><author>LionLone</author><pubDate>Sun, 13 Mar 2022 17:05:44 +0800</pubDate><description><![CDATA[# @Time     :2022/3/13 0013 14:07
# @Author   :lionlone
# @FIle:    :vcs.py
# @Software :PyCharm
# @Describe :基于redis的验证码生成、校验系统, 可对验证码生成和校验做次数限制, 用于手机验证码、邮箱验证码的实现
import hashlib
import random
import string

from redis import Redis


class Vcs:

    def __]]></description><category></category></item><item><title><![CDATA[flask sqlalchemy (高级篇)]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123394964</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123394964</guid><author>LionLone</author><pubDate>Thu, 10 Mar 2022 10:25:49 +0800</pubDate><description><![CDATA[本篇介绍一些高级的orm操作技巧



]]></description><category></category></item><item><title><![CDATA[flask sqlalchemy（基础篇）]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123392154</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123392154</guid><author>LionLone</author><pubDate>Thu, 10 Mar 2022 10:17:35 +0800</pubDate><description><![CDATA[本篇主要记录常用的 CURD 操作。
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
	# 下面是定义表内字段
    index = db.Column('index', db.Integer, primary_key=True, autoincrement=True)
    nick = db.Column(db.String(100), default="unknown")
    e]]></description><category></category></item><item><title><![CDATA[flask sqlchemy（入门篇）]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123367558</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123367558</guid><author>LionLone</author><pubDate>Thu, 10 Mar 2022 08:32:47 +0800</pubDate><description><![CDATA[1. 安装
pip install flask-sqlalchemy

2. 初始化配置
这是我的flask项目常用的目录结构，仅作参考
      ]]></description><category></category></item><item><title><![CDATA[flask 自定义错误类型]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123367446</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123367446</guid><author>LionLone</author><pubDate>Wed, 09 Mar 2022 06:16:26 +0800</pubDate><description><![CDATA[做前后端分离全栈项目，前端必然要对路由进行封装、拦截等，而本人使用的又是阿里云fc的HTTP触发器，无法使用任意的状态码标识错误，因此需要基于HTTPException类自定义错误类，固定所有错误的响应码都是200，自定义响应体结构，便于前端封装。
class BaseError(HTTPException):
    code = 200

    def __init__(self, code=500, msg="error", content=None):
        if content is ]]></description><category></category></item><item><title><![CDATA[flask装饰器的应用]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/123367443</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/123367443</guid><author>LionLone</author><pubDate>Wed, 09 Mar 2022 05:49:33 +0800</pubDate><description><![CDATA[开发中经常遇到需要对某个接口做权限校验，或者访问频率限制等，这时候就可以使用装饰器对请求进行预处理，如果满足访问条件，则放行；不满足则抛出自定义的异常。
from flask.views import View

class User(View):
	@aac.require_login
	def get(user_id):
		'''登录校验'''
		···
		return ""
		
	@aac.limit_rate(1, 1)
	def post(user_id):
		'''频率限制器'''

]]></description><category></category></item><item><title><![CDATA[android color详解]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122421262</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122421262</guid><author>LionLone</author><pubDate>Tue, 11 Jan 2022 00:04:22 +0800</pubDate><description><![CDATA[res&gt;values&gt;themes 应该是全局覆盖所继承的样式，其实可以对每个控件定制的，因此这里的样式就可以不必强记，记住几个主要的即可
&lt;!--   状态栏背景色    --&gt;
        &lt;item name="android:statusBarColor" tools:targetApi="l"&gt;#dddddd&lt;/item&gt;
        &lt;!--   状态栏文字色 true：黑色，false: 白色    --&gt;
        &]]></description><category></category></item><item><title><![CDATA[使用pypy环境——快到飞起]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122322216</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122322216</guid><author>LionLone</author><pubDate>Wed, 05 Jan 2022 14:09:11 +0800</pubDate><description><![CDATA[先做个简单测试，感受下这玩意儿的速度
import time
st = time.time()
result = 0
for each in range(1000000000):
    result+=each
print(result)
print('runtime:%f\n'%(time.time() - st))

结果
# 一般的python环境（称为Cpython）
499999999500000000
runtime:91.477087

# pypy环境
499999999500000000]]></description><category></category></item><item><title><![CDATA[web低成本的安全登录方案]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122295833</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122295833</guid><author>LionLone</author><pubDate>Tue, 04 Jan 2022 10:10:52 +0800</pubDate><description><![CDATA[背景
最近在开发restful风格的数据仓库，使用的是阿里云的函数计算，技术栈是：Vue+Flask(部分用Go)，后端API采用restul风格。
由于数据比较敏感，安全系数肯定要比较高才行，但由于我是个人开发，限于成本，只能尽可能的优化代码逻辑，平衡存储和计算成本。
遇到的问题与自己的解决方案
权限管理这个地方，遇到的问题

是否开放账号密码注册的方式？
我参考了国内多数app/web应用，发现相当一部分仅开放了手机号验证注册/登录，或者开放第三方如微信/支付宝之类的，但是最后还是要绑定手机，于是我想了]]></description><category></category></item><item><title><![CDATA[flask 返回前端可以拖动进度的视频流]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122293315</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122293315</guid><author>LionLone</author><pubDate>Mon, 03 Jan 2022 21:57:31 +0800</pubDate><description><![CDATA[近期在做一个pc webview的项目，用的是熟悉的flask+pywebview, 涉及到本地视频文件在前端页面上播放，最开始尝试直接打开文件，然后返回read的值，发现前端无法拖动进度条，查阅之后，才知道需要传输视频流，条件是：

前端请求头携带 Range, 其值表示视频文件的读取起点
后端需要在响应头中添加Content-Length,Content-Range,Accept-Range
状态码需返回206

具体配置如下，至于原因，不详，自己猜出来的。
大概就是通过移动文件的指针来指定开始读取的地]]></description><category></category></item><item><title><![CDATA[跨域问题 完全解决方案]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122228128</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122228128</guid><author>LionLone</author><pubDate>Thu, 30 Dec 2021 04:08:34 +0800</pubDate><description><![CDATA[按照这个思路走一遍，5分分钟左右，你就大彻大悟了


]]></description><category></category></item><item><title><![CDATA[vue通过临时url上传文件到oss | 跨域 | 请求头 | 等问题解决]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/122205900</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/122205900</guid><author>LionLone</author><pubDate>Wed, 29 Dec 2021 00:45:37 +0800</pubDate><description><![CDATA[axios设置
不知原因，看了一天的oss2-python的源码，用工具模拟各种请求，fiddler抓请求，最终发现，请求头中不能有Content-Type，且要携带Access-Control-Request-Headers，值设置为Content-Type，成功上传。
PS: 有大神知道原因的，希望给个解答，不胜感激
const ossService = axios.create({
	// ...
    headers:{
        'Access-Control-Request-Header]]></description><category></category></item><item><title><![CDATA[寻找Python和Java的语法共性，便于快速入门]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/121307916</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/121307916</guid><author>LionLone</author><pubDate>Sun, 14 Nov 2021 03:09:08 +0800</pubDate><description><![CDATA[Python和Java都是面向对象的语言，而计算机语言和人类的各种自然语言其实是类似的，交流的目标对象不同而已。
既然如此，首先回忆下，各位学习外语，是将母语的词汇与外语的词汇在大脑中做连接，比如读书的时候外语老师要求背诵词汇表。
那么学习Java，我们大脑其实

...]]></description><category></category></item><item><title><![CDATA[Python转Java(Android原生方向)历程]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/121307435</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/121307435</guid><author>LionLone</author><pubDate>Sat, 13 Nov 2021 17:59:56 +0800</pubDate><description><![CDATA[序
我相信，读者朋友们可能有跟我经历类似的——
非科班出身热爱编程，从谭浩强的《C语言基础》到各种技术的入门视频书籍资源辗转腾挪，最终发现了Python 这样一个可以快速拥抱编程世界的语言。
搞Python已经3年了，web、数据分析处理（音频/视频/文本/）、GUI（tkinter/wxpython/pyqt/勉强算上webview），回过头看Python对于我这种情况的人，所带来的好处，总结为以下几点：

快速入门：即便是完全没接触过Python，静下心来，也能大致看出入门级的示例
快速实现想法：简单灵]]></description><category></category></item><item><title><![CDATA[vue+axios 本地开发环境端口跨域]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/120397732</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/120397732</guid><author>LionLone</author><pubDate>Tue, 21 Sep 2021 01:20:09 +0800</pubDate><description><![CDATA[在vue.config.js中添加
module.exports = {
  publicPath: "/static",
  indexPath: "E:\\PyProgram\\xxx\\v1\\static\\index.html",
  outputDir: "E:\\PyProgram\\xxx\\v1\\static",
  css: {
    extract: false,
  },
  //添加如下代码，则拦截所有以" /api "开头的请求，发送到target指定的允许跨域的地址中
  ]]></description><category></category></item><item><title><![CDATA[百度图片爬虫(requests版本)]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/113812978</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/113812978</guid><author>LionLone</author><pubDate>Mon, 15 Feb 2021 01:28:30 +0800</pubDate><description><![CDATA[#原创
更新日期：2021/02/15

如果觉得能够节省您抓包的时间，哪怕打赏0.1也是爱呀，嘿嘿！


import requests
from urllib.parse import quote,unquote
import json

def search_baidu_image(key,num=4):
    '''
    百度图片爬虫
    :param key: 关键词
    :param num: 页面数，一页最多30张
    :return: 有数据返回数据，没数据返回None
 ]]></description><category></category></item><item><title><![CDATA[2. tkinter二次开发控件]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/108526344</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/108526344</guid><author>LionLone</author><pubDate>Fri, 11 Sep 2020 07:12:01 +0800</pubDate><description><![CDATA[背景

本人不是处女座，但有着处女座的‘坏毛病’。tkinter原生的控件美感让我十分苦恼，于是我决定二次封装一些调用方便并且相对美观的控件。

1. LabelEntry（带标签的输入框）

本人最近开发tkinter可视化开发工具时，需要写一个实时改变控件属性的页面，其中就需要若干个Label+Entry（或者Button）阵列。简单而直接的办法就是Grid方法进行排列，但是调试过程十分麻烦，比如调边距、对齐方式、Entry的快捷输入等等。

于是就用一个Frame封装了Label、Entry、Butt]]></description><category></category></item><item><title><![CDATA[1. tkinter可视化开发工具]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/108481021</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/108481021</guid><author>LionLone</author><pubDate>Wed, 09 Sep 2020 05:02:31 +0800</pubDate><description><![CDATA[唠唠嗑
tkinter玩久了，就会从开始震惊（除了VB居然还有这么简单的UI开发工具！！）到厌倦（基本控件好丑、界面美观度调优太麻烦）。于是我找到了万能的谷歌，结果找了一个下午，才在某篇与tkinter可视化无关的文章评论区找到了一个工具：，二话不多说，下载！额又是一番折腾，可算是安装好了，尝试了一下，结果生成的代码，跟我本人的代码风格完全不同。。。。。
好吧，那咱就自个儿个可视化开发工具写总行吧，经过一下午的奋斗，第一代诞生了，尝试了一下，简直是歪瑞古德啊！
我建议各位朋友如果对在学tkinter，同时有]]></description><category></category></item><item><title><![CDATA[-1. tkinter 技巧总结(不定期更新，欢迎指正)]]></title><link>https://blog.youkuaiyun.com/LionLone/article/details/108414566</link><guid>https://blog.youkuaiyun.com/LionLone/article/details/108414566</guid><author>LionLone</author><pubDate>Sat, 05 Sep 2020 05:03:28 +0800</pubDate><description><![CDATA[1. tkinter.Entry 响应&lt;Key&gt;事件时，缺少最后一个字符的问题

  解决：通过设置计时器，1ms后执行Entry.get()方法即可


from tkinter import Tk,Entry

root=Tk()
et=Entry(root)
# 方式1
# 缺少最后输入的字符
et.bind('&lt;Key&gt;',lambda event:print(event.widget.get()))
# 方式2
# 问题：不够优雅
et.bind('&lt;Key&gt..]]></description><category></category></item></channel></rss>