浅谈Python Django框架

1、Django简介

Python下有多款不同的 Web 框架,Django是最有代表性的一种。许多成功的网站和APP都基于Django。

Django是一个开源的Web应用框架,由Python写成。

Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。

2、Django的特点

1) 强大的数据库功能:用python的类继承,几行代码就可以拥有一个动态的数据库操作API,如果需要也能执行SQL语句。

2) 自带的强大的后台功能:几行代码就让网站拥有一个强大的后台,轻松管理内容。

3) 优雅的网址:用正则匹配网址,传递到对应函数。

4) 模板系统:强大,易扩展的模板系统,设计简易,代码和样式分开设计,更易管理。

5) 缓存系统:与memcached或其它缓存系统联用,表现更出色,加载速度更快。

6) 国际化:完全支持多语言应用,允许你定义翻译的字符,轻松翻译成不同国家的语言。

3、Django项目目录

1) urls.py:网址入口,关联到对应的views.py中的一个函数(或generic类),访问网址就对应一个函数。

2) views.py:处理用户发出的请求,与urls.py对应, 通过渲染templates中的网页可以将显示内容,如登陆后的用户名,用户请求的数据等输出到网页。

3) models.py:与数据库操作相关,存入或读取数据时用到,用不到数据库时可以不使用。

4) forms.py:表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,也可以不使用。

5) templates文件夹:views.py中的函数渲染templates中的html模板,得到动态内容的网页,可以用缓存来提高速度。

6) admin.py:后台,可以用很少的代码就拥有一个强大的后台。

7) settings.py:Django 的配置文件,如 DEBUG 的开关,静态文件的位置等。

4、Django基本命令

1) 新建一个项目:

  1. django-admin.py startproject project-name

在 windows 上如果报错,尝试用 django-admin 代替 django-admin.py 。

2) 新建一个APP:

  1. python manage.py startapp app-name

  1. django-admin.py startapp app-name

一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。

3) 启动服务器:

  1. python manage.py runserver 0.0.0.0:8000

  1. python manage.py runserver

前者让其它电脑可连接到服务器,监听机器上所有ip的8000端口,访问时用电脑的ip代替 127.0.0.1(8000为端口号,如果不说明,则端口号默认为8000);后者在本电脑访问服务器,访问时ip为127.0.0.1。

5、视图与网址

views.py:

from django.http import HttpResponse   
def helloWorld(request):   
    return HttpResponse("Hello world! ")  

urls.py:

from django.conf.urls import url  
from . import view  
urlpatterns = [  
    url(r'^$', view.helloWorld)  
]  

启动服务器,并在浏览器访问:127.0.0.1:8000。

修改后的urls.py:

from django.conf.urls import url  
from . import view  
urlpatterns = [  
    url(r'^helloWorld$', view.helloWorld)  
]  

启动服务器,并在浏览器访问:127.0.0.1:8000/helloWorld。

url() 函数:可以接收四个参数,分别是两个必选参数regex、view 和两个可选参数kwargs、name:

① regex:正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。

② view:用于执行与正则表达式匹配的 URL 请求。

③ kwargs:视图使用的字典类型的参数。

④ name:用来反向获取 URL。

6、Django模板

1) 实例:

① 在app目录中,创建 templates 目录并建立 helloWorld.html文件:

  1. <h1>{{ helloWorld }}</h1>

② 向Django说明模板文件的路径,修改settings.py文件,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+”/templates”,]。

③ 修改views.py:

from django.shortcuts import render  
def hello(request):  
    context = {}  
    context['helloWorld'] = 'Hello World!'  
    return render(request, 'helloWorld.html', context)  

render使用了一个字典 context 作为参数,context 字典中元素的键值 “helloWorld” 对应了模板中的变量 “{{ helloWorld }}”。

④ 启动服务器,并在浏览器访问:127.0.0.1:8000/helloWorld。

2) Django 模板标签

① if/else 标签

if/else支持嵌套,{% if %} 标签接受and、or 或not关键字来对多个变量做判断,或对变量取反。

  1. {% if condition %}
  2. {% endif %}

或者:

  1. {% if condition1 %}
  2. {% elif condiiton2 %}
  3. {% else %}
  4. {% endif %}

② for 标签

{% for %} 允许在一个序列上迭代。支持嵌套。每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。

  1. <ul>
  2. {% for person in list %}
  3. <li>{{ person.name }}</li>
  4. {% endfor %}
  5. </ul>

给标签增加一个 reversed 使得该列表被反向迭代:

  1. {% for person in list %}
  2. {% endfor %}

③ ifequal/ifnotequal 标签

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签。

  1. {% ifequal person1 person2 %}
  2. <h1>YES</h1>
  3. {% endifequal %}

④ 注释标签

Django 注释使用 {# #}。

⑤ 过滤器

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符:

{{ name|lower }}大写转换为小写。

一个过滤器管道的输出又可以作为下一个管道的输入:

{{ name|first|upper }}将第一个元素转化为大写。

有些过滤器有参数,过滤器的参数跟随冒号之后并总是以双引号包含:

{{ name|truncatewords:”3″ }}显示变量的前3个词。

addslashes:添加反斜杠到任何反斜杠、单引号或者双引号前面。

date:按指定的格式字符串参数格式化date或datetime对象,如{{ pub_date|date:”F j, Y” }}。

length:返回变量的长度。

⑥ include 标签

{% include %} 标签允许在模板中包含其它的模板的内容。

  1. {% include “test.html” %}

7、Django模型

Django 对各种数据库提供了很好的支持,Django 为数据库提供了统一的调用API,可以根据业务需求选择不同的数据库。

以MYSQL数据库为例,安装 mysql 驱动的命令:sudo pip install mysqlclient。

1) 数据库配置

在项目的settings.py文件中找到 DATABASES 配置项,将其信息修改为:

DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django  
        'NAME': 'test',  
        'USER': 'test',  
        'PASSWORD': 'test123',  
        'HOST':'localhost',  
        'PORT':'3306',  
    }  
}  

这里添加了中文注释,所以需要在settings.py 文件头部添加 # -*- coding: UTF-8 -*-。

2) 定义模型

① 创建APP:

Django规定,如果要使用模型,必须要创建一个app,使用以下命令创建一个app:python manage.py startapp TestModel。

② 修改 TestModel/models.py 文件:

from django.db import models  
class Test(models.Model):  
    name = models.CharField(max_length=20)  

类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

③ 在settings.py中找到INSTALLED_APPS这一项,添加:’TestModel’。

④ 在命令行中运行以下命令,创建数据表,表名为应用名_类名(如:TestModel_test):

view plain copy

python manage.py migrate   # 创建表结构  
python manage.py makemigrations TestModel  # 让Django知道模型有一些变更  
python manage.py migrate TestModel   # 创建表结构  

3) 数据库操作

添加database.py文件:

[python] view plain copy

from django.http import HttpResponse  
from TestModel.models import Test  
def database(request):  
    test = Test(name='Alice')  
    test.save()  
    return HttpResponse("<p>数据添加成功!</p>")  

修改 urls.py:

view plain copy

from django.conf.urls import *  
from . import view,database  
urlpatterns = [  
    url(r'^hello$', view.hello),  
    url(r'^database$', database.database)  
]  

启动服务器,并在浏览器访问:127.0.0.1:8000/database。

① 添加数据

[python] view plain copy

from django.http import HttpResponse  
from TestModel.models import Test  
def database(request):  
    test = Test(name='Alice')  
    test.save()  
    return HttpResponse("<p>数据添加成功!</p>")  

② 获取数据

[python] view plain copy

from django.http import HttpResponse  
from TestModel.models import Test  
def database(request):  
    # 初始化  
    response = ""  
    response1 = ""  
    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM  
    list = Test.objects.all()  
    # filter相当于SQL中的WHERE,可设置条件过滤结果  
    response2 = Test.objects.filter(id=1)  
    # 获取单个对象  
    response3 = Test.objects.get(id=1)  
    # 限制返回的数据,相当于SQL中的OFFSET 0 LIMIT 2;  
    Test.objects.order_by('name')[0:2]  
    # 数据排序  
    Test.objects.order_by("id")  
    # 上面的方法可以连锁使用  
    Test.objects.filter(name="Alice").order_by("id")  
    # 输出所有数据  
    for var in list:  
        response1 += var.name + " "  
    response = response1  
    return HttpResponse("<p>" + response + "</p>")  

③ 更新数据

[python] view plain copy

from django.http import HttpResponse  
from TestModel.models import Test  
def database(request):  
    # 修改id=1的name字段再save,相当于SQL中的UPDATE  
    test = Test.objects.get(id=1)  
    test.name='Alice'  
    test.save()  
    # 另一种方式  
    # Test.objects.filter(id=1).update(name='Alice)  
    # 修改所有的列  
    # Test.objects.all()..update(name='Google')  
    return HttpResponse("<p>数据修改成功</p>")  

④ 删除数据

删除数据库中的对象只需调用该对象的delete()方法即可:

[python] view plain copy

from django.http import HttpResponse  
from TestModel.models import Test  
def database(request):  
    # 删除id=1的数据  
    test = Test.objects.get(id=1)  
    test.delete()  
    # 另外一种方式  
    # Test.objects.filter(id=1).delete()  
    # 删除所有数据  
    # Test.objects.all().delete()  
    return HttpResponse("<p>数据删除成功</p>")  

8、Django表单

1) Get方法

① 创建一个 search.py 文件,用于接收用户的请求:

[python] view plain copy

from django.http import HttpResponse  
from django.shortcuts import render_to_response  
# 表单  
def search_form(request):  
    return render_to_response('search_form.html')  
    # 接收请求数据  
    def search(request):  
    request.encoding='utf-8'  
    if 'q' in request.GET:  
        message = '搜索的内容为: ' + request.GET['q'].encode('utf-8')  
    else:  
        message = '提交了空表单'  
    return HttpResponse(message)  

② 在templates中添加 search_form.html 表单:

[html] view plain copy

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title></title>  
    </head>  
    <body>  
        <form action="/search" method="get">  
            <input type="text" name="q">  
            <input type="submit" value="搜索">  
        </form>  
    </body>  
</html>   

③ 修改urls.py:

[python] view plain copy

from django.conf.urls import url  
from . import view,database,search  
urlpatterns = [  
    url(r'^helloWorld$', view.helloWorld),  
    url(r'^database$', database.database),  
    url(r'^search-form$', search.search_form),  
    url(r'^search$', search.search)  
]  

④ 启动服务器,并在浏览器访问:127.0.0.1:8000/search_form。

2) Post方法

① 在templates中添加 post.html 表单:

[python] view plain copy

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title></title>  
    </head>  
    <body>  
        <form action="/search-post" method="post">  
            {% csrf_token %}  
            <input type="text" name="q">  
            <input type="submit" value="搜索">  
        </form>  
        <p>{{ rlt }}</p>  
    </body>  
</html>  

{% csrf_token %}标签:csrf 全称是 Cross Site Request Forgery,这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

② 新建 search2.py 文件并使用 search_post 函数来处理 POST 请求:

[python] view plain copy

from django.shortcuts import render  
from django.views.decorators import csrf  
# 接收POST请求数据  
def search_post(request):  
    ctx ={}  
    if request.POST:  
        ctx['rlt'] = request.POST['q']  
    return render(request, "post.html", ctx)  

③ 修改urls.py:

[python] view plain copy

from django.conf.urls import url  
from . import view,database,search  
urlpatterns = [  
    url(r'^helloWorld$', view.helloWorld),  
    url(r'^database$', database.database),  
    url(r'^search-form$', search.search_form),  
    url(r'^search$', search.search)  
    url(r'^search-post$', search2.search_post)  
]  

④ 启动服务器,并在浏览器访问:127.0.0.1:8000/search_post。

awesome-django 模块列表

https://github.com/wsvincent/awesome-django

Contents

Third-Party Packages

For a complete listing of all available packages, see Django Packages

Admin

  • django-grappelli – A jazzy skin for the admin.
  • django-jazzmin – Drop-in theme for django admin, that utilises AdminLTE 3 & Bootstrap 4 to make yo’ admin look jazzy.
  • django-hijack – Admins can log in and work on behalf of other users without having to know their credentials.
  • django-import-export – Django application and library for importing and exporting data with admin integration.
  • django-admin-honeypot – Configure a honeypot to see who’s trying to hack your site.
  • django-loginas – “Log in as user” for the Django admin.
  • impostor – Impostor is a Django application which allows staff members to login as a different user by using their own username and password.
  • django-impersonate – Allow superusers to “impersonate” other non-superuser accounts.
  • django-admin-env-notice – Visually distinguish environments in Django Admin, for example: developmentstagingproduction.
  • django-admin-interface – Customize Admin by the admin itself(color, header. title,logo) and popup windows replaced by modals.
  • django-material-admin – Material design for django administration.
  • django-related-admin – A helper library that allows you to write list_displays accross foreign key relationships.
  • django-semantic-admin – Django Semantic UI admin theme.
  • django-jet-reboot – Django Jet is modern template for Django admin interface with improved functionality.
  • django-baton – A cool, modern and responsive django admin application based on bootstrap 5.
  • django-admin-sortable2 – Generic drag-and-drop ordering for objects in the Django admin interface.

APIs

Async

Caching

  • django-cachalot – Caches your Django ORM queries and automatically invalidates them.
  • django-cacheops – A slick ORM cache with automatic granular event-driven invalidation.

Commands

  • django-extensions – Custom management extensions, notably runserver_plus and shell_plus.
  • django-click – Write Django management commands using the click CLI library.
  • django-dbbackup – Management commands to help backup and restore your project database and media files.
  • django-liquidb – Django application to simplify migration management and changes in states of db scheme.

Configuration

  • confidential – Manage configs and secrets (with CLI support).
  • django-environ – Environment variables.
  • django-split-settings – Organize multiple settings files.
  • django-constance – A Django app for storing dynamic settings in pluggable backends (Redis and Django model backend built in) with an integration with the Django admin app.
  • djenv – Load Django settings from environmental variables.
  • django-configurations – eases Django project configuration by relying on the composability of Python classes and following principles of the twelve-factor app.
  • dynaconf – Dynaconf loads django settings from multiple sources (multiple file formats, env vars, redis, vault, etcd), manages secrets, and allows for different merging strategies all following the twelve-factor app.
  • django-extra-settings – Config and manage typed extra settings using just the django admin.

Content Management Systems

Database Connectors

  • djongo – Django and MongoDB database connector.

ECommerce

  • saleor – GraphQL-based Django E-Commerce Platform.
  • django-shop – Django-based shop system.
  • shuup – Django E-Commerce Platform.
  • django-oscar – Domain-driven e-commerce for Django.

Editors

Files/Images

  • django-cleanup – Zero configuration file/image removal for local and remote files.
  • django-imagekit – Django app for processing images for thumbnail, black-and-white and sizes.
  • django-pictures – Responsive cross-browser image library using modern codes like AVIF & WebP.

Forms

Full-stack frameworks

  • Reactor – Phoenix LiveView, but for Django.
  • Sockpuppet – Build reactive applications with the Django tooling you already know and love.
  • Unicorn – A reactive component framework that progressively enhances a normal Django view, makes AJAX calls in the background, and dynamically updates the DOM.
  • iommi – Toolkit for development of CRUD applications without writing HTML or JavaScript.

General

Logging

  • django-guid – Inject a GUID (Correlation-ID) into every log message in a Django request.
  • DRF-API-Logger – An API Logger for your Django Rest Framework project.

Model Fields

Models

Performance

  • django-perf-rec – Keep detailed records of the performance of your Django code.
  • New Relic – Time middleware, views, and SQL queries.
  • Scout – Time middleware, template rendering, and SQL queries with automatic N+1 detection.
  • django-query-profiler – Django query profiler to help resolve N+1 queries.
  • django-silk – Live profiling and inspection of HTTP requests and database queries.
  • py-spy – Sampling profiler for Python programs.
  • pyinstrument – Call stack profiler for Python, Django, Flask, FastAPI.

Search

Search Engine Optimisation

Security

Static Assets

Task Queues

  • beatserver – A periodic task scheduler for Django.
  • django-q – A multiprocessing distributed task queue.
  • django-rq – Integration for Redis Queue.
  • django-redis – Full-featured Redis cache backend for Django.
  • celery – Robust and broker-agnostic task queues for bigger, performance-focused projects.
  • flower – Flower is a web-based tool for monitoring and administrating Celery clusters.
  • django-celery-beat – A periodic task scheduler with database configured by Django’s Admin Panel.
  • celery-exporter – Prometheus & Grafana monitoring of Celery tasks.
  • django-dramatiq – Task processing library with a focus on simplicity, reliability, and performance.

Testing

URLs

  • dj-database-url – Database URLs.
  • urlman – A nicer way to do URLs for Django models.
  • django-robots – This is a basic Django application to manage robots.txt files following the robots exclusion protocol, complementing the Django Sitemap contrib app.
  • django-redirects – Redirects as they should be, with full control.

Users

  • django-allauth – Improved user registration including social auth.
  • django-organizations – Multi-user accounts for Django projects.
  • django-cas-ng – Django-cas-ng is Django CAS (Central Authentication Service) 1.0/2.0/3.0 client library to support SSO (Single Sign On) and Single Logout (SLO).

Views

Python Packages

A short list of Python packages that work well with Django.

  • bleach – Sanitize your inputs/forms.
  • black – Uncompromising Python code formatter.
  • coveragepy – Code coverage measurement.
  • faker – Faker is a Python package that generates fake data for you.
  • huey – A little task queue for Python.
  • nplusone – Auto-detect n+1 queries.
  • pillow – Python Imaging Library.
  • pytest – Testing framework.
  • python-decouple – Strict separation of settings from code.
  • python-slugify – Returns unicode slugs.
  • sentry-python – Error reporting SDK.
  • whitenoise – Simplified static file serving for Python websites.

Resources

Official Resources

Educational

Community

Conferences

Newsletters

  • Django News – Weekly newsletter on announcements, articles, projects, and talks.

Podcasts

  • Django Chat – A weekly podcast from William Vincent and Django Fellow Carlton Gibson with discussions of core Django concepts and regular guests.
  • Django Riffs – A new podcast from Matt Layman.
  • Running in Production – Focused on tech stacks with many episodes specifically on Django.
  • TalkPython – The leading Python podcast with several episodes on Django.
  • Podcast Init – A popular Python podcast that features Django guests on occasion.

Books

Django 4.0

Django 3.2

Hosting

PaaS (Platforms-as-a-Service)

IaaS (Infrastructure-as-a-Service)

Projects

Boilerplate

  • cookiecutter-django – A full-bodied starter project, highly customizable.
  • django-base-site – A Django site with many common third-party packages pre-installed.
  • djangox – Batteries included starter project for Pip, Pipenv, or Docker.
  • DRFx – A DRF starter with user auth, Pipenv, and other goodies.
  • django-project-template – A deliberately basic project that has multiple staging environments and Heroku deployment config.
  • docker-django – A quick starter guide for Django and Docker together.
  • django-startproject – Django start project template with batteries.
  • wemake-django-template – Bleeding edge Django template focused on code quality and security.
  • django-webpack-starter – Django Webpack starter template for using Webpack 4.
  • sos-django-template – Django starter template with separate dev and production settings.
  • django-docker-heroku-template – A template with Docker, GitHub Actions, and Heroku set up for dev/test/prod, plus various other best practices.
  • cookiecutter-vue-django – Django + Vue starter project fusing Vue SFCs & Django Templates.
  • launchr – Launchr is a specialized Django starter template for SaaS web apps.

Open Source Projects

Django REST Framework

The most popular way to build web APIs with Django.

DRF Resources

DRF Tutorials

Wagtail

Wagtail, the powerful CMS for modern websites.

Wagtail Resources

 

2022年python库大全

一、算法设计

Python 的数据结构,算法和设计模式的实现。另请参阅真棒算法

  • 演算法
  • 设计模式
    • PyPattyrn- 一个简单但有效的库,用于实现常见的设计模式。
    • python-patterns -Python 中设计模式的集合。
    • transitions – 一种轻量级的,面向对象的有限状态机实现。

二、声音、视频、图像、文字处理

用于处理音频及其元数据的库。

  • 声音的
    • audioread- 跨库(GStreamer + 核心音频 + MAD + FFmpeg)音频解码。
    • dejavu- 音频指纹识别。
    • kapre – Keras 音频预处理器
    • librosa- 用于音频和音乐分析的 Python 库
    • matchering – 一个用于自动参考音频制作的库。
    • mingus- 带有 MIDI 文件和播放支持的高级音乐理论和乐谱包。
    • pyAudioAnalysis- 音频特征提取,分类,分段和应用。
    • pydub- 使用简单易用的高级界面处理音频。
    • TimeSide- 开放的 Web 音频处理框架。
  • Metadata
    • beets– 音乐库管理器和 MusicBrainz 标记器。
    • eyeD3- 一种用于处理音频文件的工具,特别是包含 ID3 元数据的 MP3 文件。
    • mutagen- 处理音频元数据的 Python 模块。
    • tinytag- 用于读取 MP3,OGG,FLAC 和 Wave 文件的音乐元数据的库。

用于处理视频和 GIF 的库。

  • moviepy- 用于基于脚本的电影编辑的模块,具有多种格式,包括动画 GIF。
  • scikit-video -SciPy 的视频处理例程。
  • vidgear- 最强大的多线程视频处理框架。

用于处理图像的库。

  • hmap- 图像直方图重新映射。
  • imgSeek- 使用视觉相似性搜索图像集合的项目。
  • nude.py- 裸露检测。
  • pagan – 复古 identicon(阿凡达)根据输入的字符串和哈希生成。
  • pillow– 枕头是友好的 PIL 叉。
  • python- barcode – 在 Python 中创建条形码,没有任何额外的依赖关系。
  • pygram- 类似 Instagram 的图像过滤器。
  • PyMatting -Alpha 遮罩的库。
  • python-qrcode- 一个纯 Python QR Code 生成器。
  • pywal- 一种从图像生成配色方案的工具。
  • pyvips- 具有低内存需求的快速图像处理库。
  • Quads – 基于四叉树的计算机艺术。
  • scikit-image- 用于(科学)图像处理的 Python 库。
  • thumbor- 智能影像服务。它可以按需裁剪,调整图像大小和翻转图像。
  • wand – MagickWand 的 Python 绑定,ImageMagick 的 C API。

用于解析和处理纯文本的库。


三、日期和时间

用于处理日期和时间的库。

  • Arrow- 一个 Python 库,提供了一种明智且人性化的方法来创建,操作,格式化和转换日期,时间和时间戳。
  • Chronyk- 一个 Python 3 库,用于解析人类编写的时间和日期。
  • dateutil- 标准 Python datetime 模块的扩展。
  • delorean- 一个库,用于清除与日期时间有关的不便的事实。
  • maya- 人类的日期时间。
  • moment – 一个 Python 库用于处理日期 / 时间。受到 Moment.js 的启发。
  • Pendulum-Python 日期时间变得容易。
  • PyTime- 一个易于使用的 Python 模块,旨在按字符串操作日期 / 时间 / 日期时间。
  • pytz- 世界时区定义,现代和历史。将 tz 数据库带入 Python。
  • when.py- 提供用户友好的功能来帮助执行常见的日期和时间操作。

四、爬虫

自动执行 Web 抓取。

  • cola- 分布式抓取框架。
  • feedparser- 通用供稿解析器。
  • grab – 网站抓取框架。
  • MechanicalSoup- 用于自动与网站进行交互的 Python 库。
  • portia – Scrapy 的视觉抓取。
  • pyspider- 强大的蜘蛛系统。
  • robobrowser- 一个简单的 Pythonic 库,无需独立的 Web 浏览器即可浏览 Web。
  • scrapy- 快速的高级屏幕抓取和网络爬网框架。

用于提取 Web 内容的库。

  • html2text- 将 HTML 转换为 Markdown 格式的文本。
  • lassie- 人类的 Web 内容检索。
  • micawber- 一个小型库,用于从 URL 中提取丰富的内容。
  • newspaper -Python 中的新闻提取,文章提取和内容管理。
  • python- readability  arc90 的可读性工具的快速 Python 端口。
  • requests-html –适用于人类的 Pythonic HTML 解析。
  • sumy- 自动汇总文本文档和 HTML 页面的模块。
  • textract- 从任何文档,Word,PowerPoint,PDF 等中提取文本
  • toapi- 每个网站都提供 API。

五、HTML、XML

用于处理 HTML 和 XML 的库。

  • BeautifulSoup- 提供 Pythonic 惯用法来迭代,搜索和修改 HTML 或 XML。
  • bleach –基于白名单 HTML 清理和文本 linkification 库中的。
  • cssutils- 一个 Python 的 CSS 库。
  • html5lib- 一个符合标准的库,用于解析和序列化 HTML 文档和片段。
  • lxml- 一个非常快速,易于使用的通用库,用于处理 HTML 和 XML。
  • MarkupSafe- 为 Python 实现 XML / HTML / XHTML 标记安全字符串。
  • pyquery- 用于解析 HTML 的类似 jQuery 的库。
  • untangle –将 XML 文档转换为 Python 对象,以方便访问。
  • WeasyPrint- 用于 HTML 和 CSS 的可视渲染引擎,可以导出为 PDF。
  • xmldataset- 简单的 XML 解析。
  • xmltodict- 使用 XML 就像使用 JSON。

六、HTTP 客户端

使用 HTTP 的库。

  • grequests- 异步 HTTP 请求的 request + gevent。
  • httplib2- 全面的 HTTP 客户端库。
  • httpx- 用于 Python 的下一代 HTTP 客户端。
  • requests -HTTP 对人类的请求。
  • treq -Python 请求,例如在 Twisted 的 HTTP 客户端之上构建的 API。

七、office 模块

用于解析和处理特定文本格式的库。

  • General
    • tablib -XLS,CSV,JSON,YAML 中的表格数据集的模块。
  • Office
    • docxtpl- 通过 jinja2 模板编辑 docx 文档
    • openpyxl- 用于读取和写入 Excel 2010 xlsx /xlsm/xltx /xltm 文件的库。
    • pyexcel- 提供一个用于读取,操作和写入 csv,ods,xls,xlsx 和 xlsm 文件的 API。
    • python-docx- 读取,查询和修改 Microsoft Word 2007/2008 docx 文件。
    • python-pptx- 用于创建和更新 PowerPoint(.pptx)文件的 Python 库。
    • unoconv- 在 LibreOffice / OpenOffice 支持的任何文档格式之间转换。
    • XlsxWriter- 一个用于创建 Excel .xlsx 文件的 Python 模块。
    • xlwings -BSD 许可的库,可以轻松地从 Excel 调用 Python,反之亦然。
    • xlwt / xlrd- 从 Excel 文件写入和读取数据以及格式化信息。
  • PDF 格式
    • PDFMiner- 一种从 PDF 文档提取信息的工具。
    • PyPDF2- 一个能够拆分,合并和转换 PDF 页面的库。
    • ReportLab- 允许快速创建丰富的 PDF 文档。
  • Markdown
  • YAML
    • PyYAML- 适用于 Python 的 YAML 实现。
  • CSV
    • csvkit- 转换为 CSV 并使用 CSV 的实用程序。
  • Archive
    • unp- 一个命令行工具,可以轻松地解压缩档案。

八、序列化

用于序列化复杂数据类型的库


九、代码分析、测试

码质量检查器的工具。另请参阅令人敬畏的静态分析

  • 代码分析
    • Coala- 语言独立且易于扩展的代码分析应用程序。
    • code2flow- 将您的 Python 和 JavaScript 代码转换为 DOT 流程图。
    • prospector– 分析 Python 代码的工具。
    • pycallgraph- 一个可视化 Python 应用程序流程(调用图)的库。
    • vulture- 查找和分析无效的 Python 代码的工具。
  • Code Linters
  • 代码格式化程序
    • black –毫不妥协的 Python 代码格式化程序。
    • isort- 用于对导入进行排序的 Python 实用程序 / 库。
    • yapf- 另一个来自 Google 的 Python 代码格式化程序。
  • 静态类型检查器,另请参见 awesome-python-typing
  • 静态类型注释生成器
    • MonkeyType- 一个用于 Python 的系统,通过收集运行时类型来生成静态类型注释。
    • pyannotate- 自动生成 PEP-484 注释。
    • pytype -pytype 检查并推断 Python 代码的类型 – 无需类型注释。

渗透测试的框架和工具。

用于测试代码库和生成测试数据的库。

  • 测试框架
    • hypothesis –假设是一个高级的 Quickcheck 样式基于属性的测试库。
    • nose2 nose 基于 `unittest2。的后继者。
    • pytest- 一个成熟的功能齐全的 Python 测试工具。
    • Robot Framework 通用的测试自动化框架。
    • unittest-(Python 标准库)单元测试框架。
  • 测试选手
    • green – 干净,多彩的测试运行器。
    • mamba -Python 的权威测试工具。生于 BDD 的旗帜下。
    • tox- 自动构建和测试多个 Python 版本的发行版
  • GUI / Web 测试
    • locust- 用 Python 编写的可扩展用户负载测试工具。
    • PyAutoGUI -PyAutoGUI 是适用于人类的跨平台 GUI 自动化 Python 模块。
    • Schemathesis- 用于对基于 Open API / Swagger 规范构建的 Web 应用程序进行基于属性的自动测试的工具。
    • Selenium – Selenium WebDriver 的 Python 绑定。
    • sixpack- 与语言无关的 A / B 测试框架。
    • splinter- 用于测试 Web 应用程序的开源工具。
  • Mock
    • doublex- 强大的 Python 测试框架加倍。
    • Frozengun- 通过模拟 datetime 模块来穿越时间。
    • httmock- 一个针对 Python 2.6 + 和 3.2 + 的请求的模拟库。
    • httpretty- 适用于 Python 的 HTTP 请求模拟工具。
    • mock-(Python 标准库)一个模拟和修补库。
    • mocket – 具有 gevent /asyncio/ SSL 支持的套接字模拟框架。
    • responses 一个实用程序库,用于模拟请求 Python 库。
    • VCR.py- 记录并重放测试中的 HTTP 交互。
  • 对象工厂
    • factory_boy -Python 的测试装置替代品。
    • mixer– 另一种灯具更换。支持 Django,Flask,SQLAlchemy,Peewee 等
    • model_mommy- 创建随机夹具以在 Django 中进行测试。
  • 代码覆盖率
  • 伪数据
    • fake2db- 伪数据库生成器。
    • faker- 一个生成伪造数据的 Python 包。
    • mimesis- 是一个 Python 库,可帮助您生成虚假数据。
    • radar – 生成随机的日期时间 / 时间。

用于验证数据的库。

  • Cerberus- 一个轻量级和可扩展的数据验证库。
  • colander- 验证和反序列化通过 XML,JSON 和 HTML 表单发布获得的数据。
  • jsonschema – Python 的 JSON 模式的实现。
  • schema- 用于验证 Python 数据结构的库。
  • Schematics –数据结构验证。
  • valideer – 轻量级可扩展数据验证和适配库。
  • voluptuous – 的 – 一个 Python 数据验证库。

十、web 框架

传统的全栈 Web 框架。另请参阅 RESTful API


十一、搜索

用于对数据建立索引并执行搜索查询的库和软件。


十二、日志记录

用于生成和使用日志的库。

  • logbook – – 记录 Python 的替换记录。
  • logging-(Python 标准库)Python 的日志记录工具。
  • loguru- 旨在以 Python 带来令人愉悦的日志记录的库。
  • sentry- python – 适用于 Python 的 Sentry SDK。
  • structlog- 结构化日志变得容易。

十三、并发与并行

用于并发和并行执行的库。另请参阅 awesome-asyncio


十四、任务队列

用于处理任务队列的库。

  • celery- 基于分布式消息传递的异步任务队列 / 作业队列。
  • Dramatiq- 用于 Python 3 的快速可靠的后台任务处理库。
  • huey- 小多线程任务队列。
  • mrq- 使用 Redis 和 gevent 的 Python 中的分布式工作者任务队列。
  • rq -Python 的简单作业队列。

十五、自然语言处理

用于使用人类语言的图书馆。

  • 一般的
    • gensim- 人类主题建模。
    • langid.py- 独立的语言识别系统。
    • nltk- 用于构建 Python 程序以使用人类语言数据的领先平台。
    • pattern- 一个 Web 挖掘模块。
    • polyglot- 支持数百种语言的自然语言管道。
    • pytext 的 – 基于 PyTorch 自然语言建模框架。
    • PyTorch-NLP- 一种工具包,可用于研究的快速深度学习 NLP 原型。
    • spacy – 一种用于 Python 和用 Cython 工业强度的自然语言处理库。
    • Stanza -Stanford NLP Group 的官方 Python 库,支持 60 多种语言。
  • 中国人
    • funNLP- 中国 NLP 的工具和数据集的集合。
    • jieba- 最受欢迎的中文文本分割库。
    • pkuseg-python- 用于各种领域的中文分词的工具包。
    • snownlp- 用于处理中文文本的库。

十六、深度学习、机器学习计算机视觉

神经网络和深度学习框架。另请参阅真棒深度学习

  • caffe- 深度学习的快速开放框架。
  • keras- 一个高级神经网络库,能够在 TensorFlow 或 Theano 之上运行。
  • mxnet- 专为效率和灵活性而设计的深度学习框架。
  • pytorch- 具有强大 GPU 加速功能的 Python 中的张量和动态神经网络。
  • SerpentAI- 游戏代理框架。使用任何视频游戏作为深度学习沙箱。
  • tensorflow- 由 Google 创建的最受欢迎的深度学习框架。
  • Theano- 一个用于快速数值计算的库。

机器学习图书馆。另请参阅很棒的机器学习

  • 健身房 – 用于开发和比较强化学习算法的工具包。
  • H2O- 开源快速可扩展机器学习平台。
  • 指标 – 机器学习评估指标。
  • NuPIC -Numenta 智能计算平台。
  • scikit-learn- 最受欢迎的机器学习 Python 库。
  • Spark ML – Apache Spark 的可扩展机器学习库。
  • vowpal_porpoise- 用于 Vowpal Wabbit 的轻量级 Python 包装器。
  • xgboost- 一个可扩展,可移植和分布式的梯度增强库。
  • MindsDB -MindsDB 是现有数据库的开源 AI 层,可让您使用标准查询轻松地开发,训练和部署最新的机器学习模型。

计算机视觉图书馆。


十七、数据分析、可视化

用于数据分析的库。

  • AWS Data Wrangler -AWS 上的 Pandas。
  • Blaze -NumPy 和 Pandas 连接到大数据。
  • Pandas 界面中的 Open Mining- 商业智能(BI)。
  • Optimus –敏捷数据科学的工作流程变得容易与 PySpark。
  • Orange –通过可视化编程或脚本进行数据挖掘,数据可视化,分析和机器学习。
  • Pandas- 一个提供高性能,易于使用的数据结构和数据分析工具的库。

用于可视化数据的库。另请参阅 awesome-javascript

  • Altair- 用于 Python 的声明性统计可视化库。
  • Bokeh- 用于 Python 的交互式 Web 绘图。
  • bqplot -Jupyter Notebook 的交互式绘图库
  • Cartopy- 具有 matplotlib 支持的制图 python 库
  • 短跑 – 建立在烧瓶顶部,反应,Plotly 旨在分析 Web 应用程序。
  • 图表 – 图表为代码。
  • Matplotlib- 一个 Python 2D 绘图库。
  • plotnine- 基于 ggplot2 的 Python 图形语法。
  • Pygal- 一个 Python SVG 图表创建器。
  • PyGraphviz – Graphviz 的 Python 接口。
  • PyQtGraph- 交互式和实时 2D / 3D / 图像绘制以及科学 / 工程小部件。
  • Seaborn – 使用 Matplotlib 统计数据可视化。
  • VisPy- 基于 OpenGL 的高性能科学可视化。

十八、数据库驱动程序

用于连接和操作数据库的库。

  • MySQL- 很棒的 MySQL
  • PostgreSQL- 很棒的 Postgres
    • psycopg2- 最受欢迎的 Python PostgreSQL 适配器。
    • 查询 -psycopg2 库的包装,用于与 PostgreSQL 交互。
  • SQlite- 很棒的 SQLite
    • sqlite3-(Python 标准库)与 DB-API 2.0 兼容的 SQlite 接口
    • SuperSQLite- 建立在 apsw 之上的增压 SQLite 库。
  • 其他关系数据库
    • pymssql -Microsoft SQL Server 的简单数据库接口。
    • clickhouse-driver- 具有 ClickHouse 本地接口的 Python 驱动程序。
  • NoSQL 数据库
    • cassandra-driver -Apache Cassandra 的 Python 驱动程序。
    • happybase -Apache HBase 的开发人员友好型库。
    • kafka-python -Apache Kafka 的 Python 客户端。
    • py2neo- 用于 Neo4j 的客户端库和工具包。
    • pymongo -MongoDB 的官方 Python 客户端。
    • redis-py -Redis 的 Python 客户端。
  • 异步客户端
    • motor -MongoDB 的异步 Python 驱动程序。

十九、DevOps 工具

DevOps 的软件和库。

  • 配置管理
    • ansible- 一个非常简单的 IT 自动化平台。
    • cloudinit- 一个多分发包,用于处理云实例的早期初始化。
    • OpenStack- 用于构建私有和公共云的开源软件。
    • pyinfra- 通用的 CLI 工具和 python 库,可自动执行基础架构。
    • saltstack- 基础结构自动化和管理系统。
  • SSH 样式的部署
    • cuisine – 类似于 Fabric 的厨师功能。
    • fabric – 一个简单的,Python 化工具,用于远程执行和部署。
    • fabtools- 编写很棒的 Fabric 文件的工具。
  • 流程管理
    • honcho – Foreman 的 Python 克隆,用于管理基于 Procfile 的应用程序。
    • supervisor – 用于 UNIX 监事过程控制系统。
  • 监控方式
    • psutil- 跨平台的流程和系统实用程序模块。
  • 后备
    • BorgBackup- 具有压缩和加密功能的重复数据删除存档器。
  • 其他

二十、分布式计算

分布式计算的框架和库。

  • 批量处理
    • dask- 用于分析计算的灵活并行计算库。
    • luigi- 一个模块,可帮助您构建批处理作业的复杂管道。
    • mrjob- 在 Hadoop 或 Amazon Web Services 上运行 MapReduce 作业。
    • PySpark – Apache Spark Python API。
    • Ray- 用于并行和分布式 Python 的系统,统一了机器学习生态系统。
  • 流处理

二十一、配置、打包构建

用于存储和解析配置选项的库。

  • configobj- 带有验证的 INI 文件解析器。
  • configparser-(Python 标准库)INI 文件解析器。
  • hydra -Hydra 是用于优雅配置复杂应用程序的框架。
  • profig- 使用值转换从多种格式进行配置。
  • python-decouple- 严格将设置与代码分开。

用于创建打包的可执行文件以进行发行的库。

  • dh-virtualenv- 以 Debian 软件包的形式构建和分发 virtualenv。
  • Nuitka – 将脚本,模块,程序包编译为可执行文件或扩展模块。
  • py2app- 冻结 Python 脚本(Mac OS X)。
  • py2exe- 冻结 Python 脚本(Windows)。
  • pyarmor- 一种用于混淆 python 脚本,将混淆后的脚本绑定到固定计算机或使混淆后的脚本失效的工具。
  • PyInstaller- 将 Python 程序转换为独立的可执行文件(跨平台)。
  • pynsist- 用于构建 Windows 安装程序的工具,安装程序将 Python 本身捆绑在一起。
  • shiv- 命令行实用程序,用于构建完全独立的 zipapp(PEP 441),但包括其所有依赖项。

二十二、虚拟环境

用于 Python 版本和虚拟环境管理的库。

  • pyenv- 简单的 Python 版本管理。
  • virtualenv- 创建隔离的 Python 环境的工具。

二十三、界面开发

用于处理图形用户界面应用程序的库。

  • curses – – 内置包装器 ncurses 的用于创建终端 GUI 的应用程序。
  • Eel- 一个用于制作简单的类似于电子的脱机 HTML / JS GUI 应用程序的库。
  • enaml- 使用声明性语法(如 QML)创建漂亮的用户界面。
  • Flexx -Flexx 是用于创建 GUI 的纯 Python 工具包,它使用 Web 技术进行呈现。
  • Gooey – 使用命令行将命令行程序转换为完整的 GUI 应用程序。
  • kivy- 用于创建 NUI 应用程序的库,可在 Windows,Linux,Mac OS X,Android 和 iOS 上运行。
  • pyglet -Python 的跨平台窗口和多媒体库。
  • PyGObject -GLib / GObject / GIO / GTK +(GTK + 3)的 Python 绑定。
  • PyQt – Qt 跨平台应用程序和 UI 框架的 Python 绑定。
  • PySimpleGUI – tkinter,Qt,WxPython 和 Remi 的包装。
  • pywebview- 围绕 webview 组件的轻量级跨平台本机包装器。
  • Tkinter -Tkinter 是 Python 的事实上的标准 GUI 软件包。
  • Toga -Python 本机,OS 本机 GUI 工具箱。
  • urwid- 一个用于创建终端 GUI 应用程序的库,该库对小部件,事件,丰富的颜色等具有强大的支持。
  • wxPython -wxWidgets C ++ 类库与 Python 的混合。
  • DearPyGui- 一个简单的 GPU 加速的 Python GUI 框架

二十四、游戏开发

很棒的游戏开发库。

  • Arcade -Arcade 是一个现代 Python 框架,用于制作具有引人注目的图形和声音的游戏。
  • Cocos2d -cocos2d 是用于构建 2D 游戏,演示和其他图形 / 交互应用程序的框架。
  • Harfang3D- 用于 3D,VR 和游戏开发的 Python 框架。
  • Panda3D- 迪士尼开发的 3D 游戏引擎。
  • Pygame -Pygame 是一组旨在编写游戏的 Python 模块。
  • PyOgre -Ogre 3D 渲染引擎的 Python 绑定,可用于游戏,模拟或任何 3D。
  • PyOpenGL -OpenGL 及其相关 API 的 Python ctypes 绑定。
  • PySDL2 -SDL2 库的基于 ctypes 的包装器。
  • RenPy- 一个视觉小说引擎

二十五、任务调度器

用于计划作业的库。

  • Airflow 气流是一个以编程方式编写,安排和监视工作流的平台。
  • APScheduler- 轻巧但功能强大的进程内任务计划程序,可让您计划功能。
  • django-schedule -Django 的日历应用程序。
  • doit- 一个任务运行器和构建工具。
  • gunnery – 具有基于 Web 界面的分布式系统的多用途任务执行工具。
  • Joblib- 一套在 Python 中提供轻量级流水线的工具。
  • Plan – 像用吊饰一样用 Python 编写 crontab 文件。
  • Prefect- 一个现代的工作流程编排框架,可轻松构建,调度和监视强大的数据管道。
  • schedule- 针对人类的 Python 作业调度。
  • Spiff- 用纯 Python 实现的功能强大的工作流引擎。
  • TaskFlow- 一个 Python 库,可帮助简化,一致且可靠的任务执行

二十六、科学计算

用于科学计算的图书馆。另请参见 Python for-Scientists

  • astropy- 天文学的社区 Python 库。
  • bcbio-nextgen- 提供最佳实践流水线,用于全自动高通量测序分析。
  • bccb- 收集与生物学分析有关的有用代码。
  • Biopython -Biopython 是一套免费的生物计算工具。
  • cclib- 一个用于解析和解释计算化学程序包结果的库。
  • Colour – 实施大量的颜色理论转换和算法。
  • Karate Club – 用于图形结构化数据的无监督机器学习工具箱。
  • NetworkX- 用于复杂网络的高生产率软件。
  • NIPY- 神经影像工具箱的集合。
  • NumPy- 使用 Python 进行科学计算的基本软件包。
  • ObsPy- 地震学的 Python 工具箱。
  • Open Babel- 一种化学工具箱,旨在讲多种化学数据语言。
  • PyDy -Python Dynamics 的缩写,用于协助工作流进行动态运动建模。
  • PyMC- 马尔可夫链蒙特卡洛采样工具包。
  • QuTiP -Python 中的 Quantum Toolbox。
  • RDKit- 化学信息学和机器学习软件。
  • SciPy- 用于数学,科学和工程的基于 Python 的开源软件生态系统。
  • SimPy- 一个基于过程的离散事件模拟框架。
  • statsmodels -Python 中的统计建模和计量经济学。
  • SymPy- 一个用于符号数学的 Python 库。
  • Zipline- 一个 Pythonic 算法交易库。

RPC

RPC 兼容服务器。

  • RPyC(远程 Python 调用)- 用于 Python 的透明且对称的 RPC 库
  • zeroRPC -zerorpc 是基于 ZeroMQ 和 MessagePack 的灵活 RPC 实现。