python: 36 items found.

authlib - python OAuth/OpenID library

The ultimate Python library in building OAuth, OpenID Connect clients and servers. JWS,JWE,JWK,JWA,JWT included.

这个库可以用做oauth/openid的客户端,或者自建oauth/openid server端。
flask 和 django都有文档示例。

还有个flask 的oauth server 库, https://flask-oauthlib.readthedocs.io/en/latest/oauth2.html , 不过官方建议使用上述的authlib.

More ~

python中合并两个list

如下,有两个list需要合并

list1 = ['a', 'b', 'c']
list2 = ['c', 'd', 'e']

期望合并结果为

['a', 'b', 'c', 'd', 'e']

以下方法可以合并

list1 + list2
list1.extend(list2)
[*list1, *list2]
list1 += list2
More ~

python 的subprocess 模块使用详解

一、简介

  subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。

  subprocess用来替换多个旧模块和函数:

  • os.system
  • os.spawn*
  • os.popen*
  • popen2.*
  • commands.*

运行python的时候,我们都是在创建并运行一个进程,linux中一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在python中,我们通过标准库中的subprocess包来fork一个子进程,并且运行一个外部的程序。subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所欲我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

More ~

vscode中 flake8 忽略检查项

主要是python.linting.flake8Args 中加上 --ignore参数 即可

{
    "python.linting.flake8Enabled": true,
    "python.formatting.provider": "yapf",
    "python.linting.flake8Args": [
        "--max-line-length=248",
        "--ignore=F403,F405"
    ],
    "python.linting.pylintEnabled": false

}
More ~

python中用点 "."来访问多层字典值

标题可能有点难以描述。举个例子。我有一个配置文件。

CONFIG = {
    'app_name': 'ZiXi',
    'mysql': {
        'host': '127.0.0.1',
    }
    'version': 'v2.0.11',
}

通常可以通过CONFIG['mysql']['host'] 这种方式访问,但我们还是想更简单点访问。如
CONFIG.mysql.host ,那么有几种方法。

More ~

python-feedgen: 一个生成atom, rss及podcasts源的python库

项目地址:https://github.com/lkiesow/python-feedgen
文档地址:https://lkiesow.github.io/python-feedgen/

示例:

from feedgen.feed import FeedGenerator


def feed():
    """
    Generate atom feed
    """
    entries = parse_posts(0, C.feed_count)
    fg = FeedGenerator()
    fg.id(str(len(entries)))
    fg.title(C.title)
    fg.subtitle(C.subtitle)
    fg.language(C.language)
    fg.author(dict(name=C.author, email=C.email))
    fg.link(href=C.root_url, rel='alternate')
    fg.link(href=make_abs_url(C.root_url, 'feed'), rel='self')
    for entry in entries:
        fe = fg.add_entry()
        fe.id(entry.get('url'))
        fe.title(entry.get('title'))
        fe.published(entry.get('date'))
        fe.updated(entry.get('updated') or entry.get('date'))
        fe.link(href=make_abs_url(C.root_url, entry.get('url')), rel='alternate')
        fe.author(dict(name=entry.get('author'), email=entry.get('email')))
        fe.content(entry.get('body'))
 
    atom_feed = fg.atom_str(pretty=True)
    return atom_feed
More ~