Django的Mypy存根

django-stubs的Python项目详细描述


mypy logo

Django框架的PEP484存根

Build StatusChecked with mypy

这个包包含类型stubs和mypy插件,为django框架提供更精确的静态类型和类型推断。django使用了一些python“魔术”,这使得一些代码模式的精确类型成为问题。这就是为什么我们需要在stub中附带mypy插件。最后一个目标是能够获得最常见模式的精确类型。

支持Python3.6/3.7和Django 2.1/2.2。

可以在django的早期版本上运行,但预计会出现一些缺少导入警告的情况。

安装

pip install django-stubs

警告:1.0.0之前版本的所有配置都将被删除,请使用下面的配置。

警告:1.0.0中断dmypy,如果需要,请继续使用0.12.x系列。

要让mypy知道这个插件,您需要添加

[mypy]
plugins =
    mypy_django_plugin.main

在你的mypy.ini文件中。

插件要求在mypy.ini文件中指定django设置模块(放入DJANGO_SETTINGS_MODULE变量中的内容)。

[mypy]
strict_optional = True

; this one is new
[mypy.plugins.django-stubs]
django_settings_module = mysettings

其中mysettingsDJANGO_SETTINGS_MODULE的值(带或不带引号)

你对mypy/django插件找不到你的设置模块有问题吗?尝试将项目的根路径添加到pythonpath环境变量中。如果使用pipenv,可以将以下内容添加到项目根目录中的.env文件中,pipenv将在执行任何命令之前自动运行该文件。

PYTHONPATH=${PYTHONPATH}:${PWD}

新的实现使用django运行时来提取模型信息,因此如果安装的应用程序models.py不正确,它将崩溃。出于同样的原因,您不能在将为django.setup()执行的任何python文件的全局范围内使用reveal_type

换句话说,如果您的manage.py runserver崩溃,mypy也将崩溃。

注释

实现monkey补丁django将__class_getitem__添加到Manager类。如果您使用python3.7并在您的代码中也这样做,那么您可以做如下事情

class MyUserManager(models.Manager['MyUser']):
    pass
class MyUser(models.Model):
    objects = UserManager()

工作,这会使错误消息更好一点。

否则,将在mypy中创建名为MyUser__MyUserManager的自定义类型,它将重写基管理器为models.Manager[User],以使get_queryset()等方法返回正确类型的QuerySet

获取帮助

我们这里有吉特https://gitter.im/mypy-django/Lobby

如果你认为你有更一般的打字问题,请参考https://github.com/python/mypy和他们的gitter。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法