GenericIPAddressField – Django模型
GenericIPAddressField是一个存储**IPv4或IPv6地址的字段,以字符串格式(例如192.0.2.30或2a02:42fe::4)。这个字段的默认窗体部件是一个TextInput。IPv6地址的规范化遵循RFC 4291#section-2.2 section 2.2,包括使用该节第3段中建议的IPv4格式,如::fff:192.0.2.0。例如,2001:0::0:01将被规范化为2001::1,而:fff:0a0a:0a0a则为:fff:10.10.10.10。所有字符都转换为小写。
语法:
field_name = models.GenericIPAddressField(**options)
GenericIPAddressField接受以下参数:
GenericIPAddressField.protocol
将有效输入限制在指定的协议上。可接受的值是 “两者”(默认)、”IPv4 “或 “IPv6″。匹配是不区分大小写的。
GenericIPAddressField.unpack_ipv4
解压IPv4映射的地址,如::fff:192.0.2.1。如果这个选项被启用,该地址将被解包为192.0.2.1。默认为禁用。只有在协议设置为’both’时才能使用。
Django模型的GenericIPAddressField说明
用一个例子说明GenericIPAddressField的情况。考虑一个名为geeksforgeeks的项目,有一个名为geeks的应用程序。
在geeks应用程序的models.py文件中输入以下代码。
from django.db import models
from django.db.models import Model
# Create your models here.
class GeeksModel(Model):
geeks_field = models.GenericIPAddressField()
在INSTALLED_APPS中增加geek的应用程序。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'geeks',
]
现在,当我们从终端运行makemigrations命令时。
Python manage.py makemigrations
在geeks目录下将创建一个名为migrations的新文件夹,其中有一个名为0001_initial.py的文件。
# Generated by Django 2.2.5 on 2019-09-25 06:00
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name ='GeeksModel',
fields =[
('id',
models.AutoField(
auto_created = True,
primary_key = True,
serialize = False,
verbose_name ='ID'
)),
('geeks_field',
models.GenericIPAddressField()),
],
),
]
Now run,
Python manage.py migrate
因此,当你在项目中运行迁移时,会创建一个geeks_field GenericIPAddressField。它是一个用来存储整数的字段。
如何使用 GenericIPAddressField
GenericIPAddressField用于存储Pv4或IPv6地址,为字符串格式,所以它基本上是一个带有IP地址验证的CharField。让我们试着在这个字段中保存一个IP地址 ” 0.0.0.0 ” 。
# importing the model
# from geeks app
from geeks.models import GeeksModel
# creating an instance of
# IP addresses
d = "0.0.0.0"
# creating a instance of
# GeeksModel
geek_object = GeeksModel.objects.create(geeks_field = d)
geek_object.save()
现在让我们在管理服务器中检查一下。我们已经创建了一个GeeksModel的实例。