django源码解析之BigIntegerField (一)

要分析django的源码,来更深入的学习django,是一个不错的方法,可惜需要大量的时间。

所以,能分析多少就是多少吧。

本次源码分析以1.4.16为基础。

用sublime 打开下载的源码,使用 Find in Folder,查找BigIntegerField

在其中可以看到这样的代码:

1  1005      def formfield(self, **kwargs):
2  1006:         defaults = {‘min_value‘: -BigIntegerField.MAX_BIGINT - 1,
3  1007:                     ‘max_value‘: BigIntegerField.MAX_BIGINT}

这段代码在

Django-1.4.16\django\db\models\fields\__init__.py

这是一个表单验证的部分,我们很容易就看到BigIntegerField 出现了最大值和最小值,搜索MAX_BIGINT

1  1000:     MAX_BIGINT = 9223372036854775807

在 1000行处

到此,我们很容易的确定了

BigIntegerField 的取值范围是 [-9223372036854775808,9223372036854775807]



下面是 BigIntegerField

 1 class BigIntegerField(IntegerField):
 2     empty_strings_allowed = False
 3     description = _("Big (8 byte) integer")
 4     MAX_BIGINT = 9223372036854775807
 5
 6     def get_internal_type(self):
 7         return "BigIntegerField"
 8
 9     def formfield(self, **kwargs):
10         defaults = {‘min_value‘: -BigIntegerField.MAX_BIGINT - 1,
11                     ‘max_value‘: BigIntegerField.MAX_BIGINT}
12         defaults.update(kwargs)
13         return super(BigIntegerField, self).formfield(**defaults)

我们可以看出,BigIntegerField 是继承自 IntegerField

虽然还有很多内容我们不了解,但是我们慢慢分析,总会弄清楚的,不要太着急。



在最新的 django 1.7.1中

在\django\db\backends\__init__.py

  744          ‘SmallIntegerField‘: (-32768, 32767),
  745          ‘IntegerField‘: (-2147483648, 2147483647),
  746:         ‘BigIntegerField‘: (-9223372036854775808, 9223372036854775807),
  747          ‘PositiveSmallIntegerField‘: (0, 32767),
  748          ‘PositiveIntegerField‘: (0, 2147483647),

很显然,版本升级后 BigIntegerField 取值范围并没有发生变化

时间: 2025-01-02 14:38:57

django源码解析之BigIntegerField (一)的相关文章

Django源码解析(1):启动程序

1.Django的启动 1.1.启动命令 在Django项目根目录执行启动命令,如下: python manage.py runserver 8008 1.2.执行manage.py manage.py源码: if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "middleware_demo.settings") try: from django.

Django源码解析:setting.py

1. setting.py文件 我们在django项目中,新建一个app的时候,都会有一个setting.py文件,里面包含了整个项目所有的配置,包括apps,中间键,数据库等等,django是如何将该setting文件利用起来的呢. 2. 从setting.py配置文件到Setting类 (1)启动的时候,指定默认的配置文件 django在启动的时候,会调用manage.py文件运行server的实例,在文件一开始的时候,manage.py会调用下面代码 os.environ.setdefau

django源码解析之 BooleanField (三)

1 def __init__(self, *args, **kwargs): 2 kwargs['blank'] = True 3 if 'default' not in kwargs and not kwargs.get('null'): 4 kwargs['default'] = False 5 Field.__init__(self, *args, **kwargs) 在看完 BooleanField 的 to_python 之后,我们来看看 __init__ 先看看我从github上co

django源码解析之 BooleanField (二)

class BooleanField(Field): empty_strings_allowed = False default_error_messages = { 'invalid': _(u"'%s' value must be either True or False."), } description = _("Boolean (Either True or False)") def __init__(self, *args, **kwargs): kwa

django源码解析一(请求处理流程)

1.我们都知道WSGI是一个规范,规范了server和application之间通信的一些约束,server端在监听到请求之后,会把请求转给application去处理,他们之间关联起来的桥梁是一个env变量和一个start_response的回调函数,env用来初始化application的request请求,start_response方法用来将response返回给server. 2.每一个application都要实现一个__call__方法接收两个参数(environ, start_r

Django settings源码解析

Django settings源码 Django中有两个配置文件 局部配置:配置文件settings.py,即项目同名文件夹下的settings.py文件 全局配置:django内部全局的配置文件settings.py,需要导入才能看到 from django.conf import settings # 是一个对象,单例模式 from django.conf import global_settings # 真正的默认配置文件 特点: 先加载全局配置,再加载局部配置,以局部优先 源码解析 点进

django源码阅读

最近再看django-bootstrap-toolkit,一直困惑于静态文件的路径问题.所以只能从源码入手了.   从manage.py开始.manage.py 比较简单就几句话. #!/usr/bin/env python    #from django.core.management import execute_manager    import os    import sys             if __name__ == "__main__":        #加载配

CBV-2-CBV流程-View源码解析

CBV是基于反射实现根据请求方式不同,执行不同的方法. 请求流程:view源码解析 1.urls.py :请求一定来执行视图下的as_view方法.也可以直接点击as_view()来找源码. 2.views.py 视图内没有as_view方法,则找父级的as_view方法. 3.源码:as_view返回自己下面的view方法,as_view执行了自己view方法,返回值是dispatch方法. 4,dispatch方法判断请求方式. 5,所以请求已经来,第一步先执行的都是dispatch方法.

CBV-2-CBV流程-view源码解析-面向对象-继承

CBV-2-CBV流程-view源码解析-面向对象-继承 CBV,基于反射实现根据请求方式不同,执行不同的方法. 请求流程:view源码解析 1.urls.py :请求一定来执行视图下的as_view方法. 2.views.py 视图内没有as_view方法,则找父级的as_view方法. 3.源码:as_view返回自己下面的view方法 4.as_view执行了自己view方法,放回值是dispatch方法. 5.dispatch方法判断请求方式. 6.所以请求已经来,第一步先执行的都是di