get到的python库

python实用库

加解密 —— itsdangerous

将数据传递给第三方时,需要对数据进行加密,防止数据被篡改。比如给用户发送带有链接的邮件
官方文档

  1. 安装与更新
    pip install -U itsdangerous
  2. 基本使用
from itsdangerous import TimedJSONWebSignatureSerializer as jws_auth

SECRET_KEY = "8850f888-15d6-11ea-96f6-a0afbdb7e009"


def test_json_web_signature():
    auth = jws_auth(secret_key=SECRET_KEY, salt="My Salt", expires_in=5)  # 5秒后过期
    token = auth.dumps(dict(id=2, name="LiSa"))
    data = auth.loads(token, salt="My Salt")
    print(data["name"])
    time.sleep(6)
    # 此处会报错 itsdangerous.exc.SignatureExpired: Signature expired
    data2 = auth.loads(token, salt="My Salt")  
    print(data2["name"])

全文检索框架 —— haystack

haystack支持Solr、Whoosh、ElasticSearch、Xapian等搜索引擎,其中Whoosh基于python语言,适合小型网站,这里以之为例。注意:基于django框架..... 官方文档

1. 安装与配置

  • 依赖库安装
  1. pip install django-haystack
  2. pip install whoosh
  • 配置
# settings.py 文件中:
# 1. INSTALLED_APP中加入haystack
# 2. 配置haystack相关属性
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
        'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
    },
}

# urls.py文件中加入:
urlpatterns = [
	path('search/', include('haystack.urls')),
	...
]

2. 生成索引文件

  1. 创建search_indexes文件
from haystack import indexes
from goods.models import GoodsSku

# 命名规范modelIndex, 需要继承indexes.SearchIndex, indexes.Indexable
class GoodsSkuIndex(indexes.SearchIndex, indexes.Indexable):
    # 一个searchIndex类中,只能有一个字段的document为True,该字段为主要搜索字段
    # use_template 为True时,会取search/indexes/{appName}/{modelName}_text.txt文件中的值生成索引
    text = indexes.CharField(document=True, use_template=True)
    # status 和 create_time可以提供额外的筛选项
    status = indexes.IntegerField(model_attr='status')
    create_time = indexes.DateTimeField(model_attr='create_time')

    def get_model(self):
        """必须实现的方法,返回索引的Model类"""
        return GoodsSku

    def index_queryset(self, using=None):
        """ 过滤查询出来的数据,eg:已删除、待发布... """
        return self.get_model().objects.filter(deleted=False)

  1. 创建索引模板文件
    文件地址为search/indexes/{appName}/{modelName}_text.txt
{{ object.name }}  # 商品名称索引
{{ object.desc }}  # 商品描述索引
{{ object.spu.desc }}  # 商品详情索引

3. 搜索页面

  • 搜索页面
{% comment %}
	1. action 地址与url中匹配
	2. 仅支持get请求
	3. 参数名称为q
{% endcomment %}
 <form method="get" action="search">
   {% csrf_token %}
     <input type="text" class="input_text fl" name="q" placeholder="搜索商品">
     <input type="submit" class="input_btn fr" name="" value="搜索">
 </form>
  • 搜索结果

search/search.html,当有多个搜索项时,需要根据result.content_type的类型,进行判断并引入指定的模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
	<body>
	搜索关键词: {{ query }} <br>
	查找结果:{{ page.object_list }} <br>
	分页对象:{{ paginator}} <br>
	当前页码: {{ page.number }}
	
	{% for result in page.object_list %}
		{# 列表中的对象 #}
		{{ result.object.id }} {{ result.object.name }}
	{% endfor %}
	 <a href="serach?q={{ query }}&page={{ page.previous_page_number  }}">《上一页</a>
	 <a href="serach?q={{ query }}&page={{ page.next_page_number  }}?sort={{ sort }}">下一页》</a>
	 {% for result in page.object_list %}
    	{% if result.content_type == "blog.post" %}
    		{% include "search/includes/blog/post.html" %}
    	{% endif %}
    	{% if result.content_type == "media.photo" %}
	    	{% include "search/includes/media/photo.html" %}
	    {% endif %}
	{% empty %}
    <p>No results found.</p>
{% endfor %}
	</body>
</html>

4. 生成索引

执行python manage.py rebuild_index

5. 自定义分词器

  1. 安装jieba分词库 pip install jieba
  2. 自定义分词器
    在对应的python解释器环境中haystack/backentds目录下创建chinese_analyzer.py文件

import jieba
from whoosh.analysis import Tokenizer, Token

class ChineseTokenizer(Tokenizer):
    def __call__(self, value, positions=False, chars=False,
                 keeporiginal=False, removestops=True,
                 start_pos=0, start_char=0, mode='', **kwargs):
        t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
        seglist = jieba.cut(value, cut_all=True)
        for w in seglist:
            t.original = t.text = w
            t.boost = 1.0
            if positions:
                t.pos = start_pos + value.find(w)
            if chars:
                t.startchar = start_char + value.find(w)
                t.endchar = start_char + value.find(w) + len(w)
            yield t

def ChineseAnalyzer():
    return ChineseTokenizer()
  1. 自定义backend
    复制whoosh_backend.py文件,改为whoosh_chinese_backend.py
# 1. 导入自定义分词器
from .chinese_analyzerimport ChineseAnalyzer
# 2. 删除默认分词器analyzer=StemmingAnalyzer()
analyzer=ChineseAnalyzer()
  1. 修改settings.py文件中的配置项
HAYSTACK_CONNECTIONS = {
    'default': {
        # 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
        'ENGINE': 'haystack.backends.whoosh_chinese_backend.WhooshEngine',
        'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
    },
}
  1. 重新创建索引数据
    python manage.py rebuild_index

支付宝支付SDK —— python-alipay-sdk

安装方式 pip install python-alipay-sdk
使用方法参考项目git介绍

alipay-sdk-python是官方提供的SDK,但是有毒

云存储 —— qiniu

异步任务 —— celery

window上启动

windows系统启动:
https://blog.csdn.net/weixin_44520259/article/details/106898219
1. celery -A modulename worker -l info --pool=solo
2. pip install gevent
celery -A modulename worker -l info -P gevent

version4 task命名

Did you remember to import the module containing this task?Or maybe you’re using relative imports?
在任务命名时,指定文件相对路径,即可在其它模块中引用

from __future__ import absolute_import

from celery import Celery
# 第一种
app = Celery('ta', broker=CELERY_BROKER_URL)
@app.task(name="yt_common/celery_task/export_excel_task")
def add(x, y):
    print x, y, 'aaaaa'
    return x + y

# 第二种 重写 gen_task_name方法
class MyCelery(Celery):
    def gen_task_name(self, name, module):
        """自定义任务名称"""
        if not module.startswith(__name__):
            module = "{}.{}".format(__name__, module)
        return super(MyCelery, self).gen_task_name(name, module)

持续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值