[排错] Django 常见错误的解决

错误一:
1.1 在网页上出现的报错信息

DisallowedHost at /

Invalid HTTP_HOST header: '192.168.102.2:8000'. You may need to add '192.168.102.2' to ALLOWED_HOSTS.

Request Method: 	GET
Request URL: 	http://192.168.102.2:8000/
Django Version: 	1.11.6
Exception Type: 	DisallowedHost
Exception Value: 	

Invalid HTTP_HOST header: '192.168.102.2:8000'. You may need to add '192.168.102.2' to ALLOWED_HOSTS.

Exception Location: 	/root/project/django_env/lib64/python3.6/site-packages/django/http/request.py in get_host, line 113
Python Executable: 	/root/project/django_env/bin/python
Python Version: 	3.6.8
Python Path: 	

['/root/project/mysite',
 '/usr/lib64/python36.zip',
 '/usr/lib64/python3.6',
 '/usr/lib64/python3.6/lib-dynload',
 '/root/project/django_env/lib64/python3.6/site-packages',
 '/root/project/django_env/lib/python3.6/site-packages']

Server time: 	Thu, 27 Feb 2020 06:08:45 +0000

1.2 解决错误的方法

(django_env) [root@python mysite]# vi mysite/settings.py

将以下内容:

......
ALLOWED_HOSTS = []
......

修改为:

......
ALLOWED_HOSTS = ['*']
......

[内容] Django MariaDB&MySQL 数据的增加

注意:在增加 Django MariaDB&MySQL 数据之前要先创建一个链接了 MariaDB 数据库或 MySQL 数据库的项目

正文:

内容目录:
内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

内容二:设置一个显示上一句 SQL 语句的函数

内容三:Django MariaDB&MySQL 数据的增加
3.1 方法一
3.1.1 方法一增加数据的操作
3.1.2 显示方法一增加数据的 SQL 语句
3.2 方法二
3.2.1 方法二增加数据的操作
3.2.2 显示方法二增加数据的 SQL 语句

具体的内容:
内容一:配置 Django 环境
1.1 进入 Python 环境
(django_env) [root@python mysite]# Python3

1.2 引入 os 模块和 django 模块
>>> import os,django

1.3 调用 mysite.settings 的配置
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'

1.4 让刚刚的调用生效
>>> django.setup()

1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容
>>> from movies.models import *

内容二:设置一个显示上一句 SQL 语句的函数
>>> def showsql():
...     from django.db import connection
...     print(connection.queries[-1]['sql'])

(补充:这里的 [-1] 是指显示上一条操作的 SQL 语句)

内容三:Django MariaDB&MySQL 数据的增加
3.1 方法一
3.1.1 方法一增加数据的操作
>>> newitem = Movies(mid=10001,mname='test1',mdesc='test1',mimg='eternalcenter.com',mlink='eternalcenter.com')
>>> newitem.save()

(
补充:这里以添加一条
(1)mid 字段的值为 10001
(2)mname 字段的值为 test1
(3)mdesc 字段的值为 test1
(4)mimg 字段的值为 eternalcenter.com
(5)mlink 字段的值为 eternalcenter.com
的数据为例
)

3.2.2 显示方法一增加数据的 SQL 语句
>>> showsql()
INSERT INTO `movies` (`mid`, `mname`, `mdesc`, `mimg`, `mlink`) VALUES (10001, 'test1', 'test1', 'eternalcenter.com', 'eternalcenter.com')

(
补充:这里以添加一条
(1)mid 字段的值为 10001
(2)mname 字段的值为 test1
(3)mdesc 字段的值为 test1
(4)mimg 字段的值为 eternalcenter.com
(5)mlink 字段的值为 eternalcenter.com
的数据为例
)

3.2 方法二
3.2.1 方法二增加数据的操作
>>> Movies.objects.create(mid=10002,mname='test2',mdesc='test2',mimg='eternalcenter.com',mlink='eternalcenter.com')
<Movies: Movies object (10002)>

(
补充:这里以添加一条
(1)mid 字段的值为 10002
(2)mname 字段的值为 test2
(3)mdesc 字段的值为 test2
(4)mimg 字段的值为 eternalcenter.com
(5)mlink 字段的值为 eternalcenter.com
的数据为例
)

3.2.2 显示方法二增加数据的 SQL 语句
>>> showsql()
INSERT INTO `movies` (`mid`, `mname`, `mdesc`, `mimg`, `mlink`) VALUES (10002, 'test2', 'test2', 'eternalcenter.com', 'eternalcenter.com')

(
补充:这里以添加一条
(1)mid 字段的值为 10002
(2)mname 字段的值为 test2
(3)mdesc 字段的值为 test2
(4)mimg 字段的值为 eternalcenter.com
(5)mlink 字段的值为 eternalcenter.com
的数据为例
)

[内容] Django MariaDB&MySQL 数据的删除

注意:在删除 Django MariaDB&MySQL 数据之前要先创建一个链接了 MariaDB 数据库或 MySQL 数据库的项目

正文:

内容目录:
内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

内容二:设置一个显示上一句 SQL 语句的函数

内容三:Django MariaDB&MySQL 数据的删除
3.1 方法一
3.1.1 方法一删除数据的操作
3.1.2 显示方法一删除数据的 SQL 语句
3.2 方法二
3.2.1 方法二删除数据的操作
3.2.2 显示方法二删除数据的 SQL 语句

具体的内容:
内容一:配置 Django 环境
1.1 进入 Python 环境
(django_env) [root@python mysite]# Python3

1.2 引入 os 模块和 django 模块
>>> import os,django

1.3 调用 mysite.settings 的配置
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'

1.4 让刚刚的调用生效
>>> django.setup()

1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容
>>> from movies.models import *

内容二:设置一个显示上一句 SQL 语句的函数
>>> def showsql():
...     from django.db import connection
...     print(connection.queries[-1]['sql'])

(补充:这里的 [-1] 是指显示上一条操作的 SQL 语句)

内容三:Django MariaDB&MySQL 数据的删除
3.1 方法一
3.1.1 方法一删除数据的操作
>>> item = Movies.objects.filter(mid='5')

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.1.2 显示方法一删除数据的 SQL 语句
>>> item.delete()
(1, {'movies.Movies': 1})
>>> showsql()
DELETE FROM `movies` WHERE `movies`.`mid` = 5

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.2 方法二
3.2.1 方法二删除数据的操作
>>> Movies.objects.filter(mid='5').delete()
(1, {'movies.Movies': 1})

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.2.2 显示方法二删除数据的 SQL 语句
>>> showsql()
DELETE FROM `movies` WHERE `movies`.`mid` = 5

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

[内容] Django MariaDB&MySQL 数据的修改

注意:在修改 Django MariaDB&MySQL 数据之前要先创建一个链接了 MariaDB 数据库或 MySQL 数据库的项目

正文:

内容目录:
内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

内容二:设置一个显示上一句 SQL 语句的函数

内容三:Django MariaDB&MySQL 数据的修改
3.1 方法一
3.1.1 方法一修改数据的操作
3.1.2 显示方法一修改数据的 SQL 语句
3.2 方法二
3.2.1 方法二修改数据的操作
3.2.2 显示方法二修改数据的 SQL 语句

具体的内容:
内容一:配置 Django 环境
1.1 进入 Python 环境
(django_env) [root@python mysite]# Python3

1.2 引入 os 模块和 django 模块
>>> import os,django

1.3 调用 mysite.settings 的配置
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'

1.4 让刚刚的调用生效
>>> django.setup()

1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容
>>> from movies.models import *

内容二:设置一个显示上一句 SQL 语句的函数
>>> def showsql():
...     from django.db import connection
...     print(connection.queries[-1]['sql'])

(补充:这里的 [-1] 是指显示上一条操作的 SQL 语句)

内容三:Django MariaDB&MySQL 数据的修改
3.1 方法一
3.1.1 方法一修改数据的操作
>>> newitem = Movies.objects.last()
>>> newitem.mname='newtest'
>>> newitem.save()

(
补充:这里以
(1)将 movies 表里最后一条数据的
(2)mname 字段的值修改为 newtest
(3)mdesc 字段的值修改为 Animation, UHD, Dolby Vision,Dolby Atmos
(4)mimg 字段的值修改为 eternalcenter.com/news/image
(5)mlink 字段的值修改为 eternalcenter.com/news
为例
)

3.1.2 显示方法一修改数据的 SQL 语句
>>> showsql()
UPDATE `movies` SET `mname` = 'newtest', `mdesc` = 'Animation, UHD, Dolby Vision,Dolby Atmos', `mimg` = 'eternalcenter.com/news/image', `mlink` = 'eternalcenter.com/news' WHERE `movies`.`mid` = 5

(
补充:这里以
(1)将 movies 表里最后一条数据的
(2)mname 字段的值修改为 newtest
(3)mdesc 字段的值修改为 Animation, UHD, Dolby Vision,Dolby Atmos
(4)mimg 字段的值修改为 eternalcenter.com/news/image
(5)mlink 字段的值修改为 eternalcenter.com/news
为例
)

3.2 方法二
3.2.1 方法二修改数据的操作
>>> Movies.objects.filter(mid=5).update(mname='newtest2')
1

(补充:这里以将 movies 表里 mid 字段等于 5 的 mname 字段修改为 newtest2 为例)

3.2.2 显示方法二修改数据的 SQL 语句
>>> showsql()
UPDATE `movies` SET `mname` = 'newtest2' WHERE `movies`.`mid` = 5

(补充:这里以将 movies 表里 mid 字段等于 5 的 mname 字段修改为 newtest2 为例)

[内容] Django Models 常用数据库字段

内容目录:
内容一:Django Models 常用的文本字段
1.1 CharField() 字符串字段
1.1.1 CharField() 字符串字段的格式
1.1.2 CharField() 字符串字段的必选项
1.1.3 CharField() 字符串字段的可选项
1.1.4 CharField() 字符串字段的使用案例
1.2 TextField() 文本字段
1.2.1 TextField() 文本字段的格式
1.2.2 TextField() 文本字段的必选项
1.2.3 TextField() 文本字段的可选项
1.2.4 TextField() 文本字段的使用案例

内容二:Django Models 常用的数值字段
2.1 IntegerField() 整数字段
2.1.1 IntegerField() 整数字段的格式
2.1.2 IntegerField() 整数字段的必选项
2.1.3 IntegerField() 整数字段的可选项
2.1.4 IntegerField() 整数字段的使用案例
2.2 PositiveIntegerFiled() 正整数字段
2.2.1 PositiveIntegerFiled() 正整数字段的格式
2.2.2 PositiveIntegerFiled() 正整数字段的必选项
2.2.3 PositiveIntegerFiled() 正整数字段的可选项
2.2.4 PositiveIntegerFiled() 正整数字段的使用案例
2.3 DecimalField() 小数字段
2.3.1 DecimalField() 正整数字段的格式
2.3.2 DecimalField() 小数字段的必选项
2.2.3 DecimalField() 小数字段的使用案例

内容三:Django Models 常用的日期字段
3.1 DateField() 日期字段
3.1.1 DateField() 日期字段的格式
3.1.2 DateField() 日期字段的可选项
3.1.3 DateField() 日期字段的使用案例
3.2 DateTimeField() 日期时间字段
3.2.1 DateTimeField() 日期时间字段的格式
3.2.2 DateTimeField() 日期时间字段的可选项
3.2.3 DateTimeField() 日期时间字段的使用案例

内容四:Django Models 常用的标准格式字段
4.1 IPAddressField() IPv4 地址字段
4.1.1 models.IPAddressField() IPv4 地址字段的格式
4.1.2 models.IPAddressField() IPv4 地址字段的使用案例
4.2 EmailField() 邮件地址字段
4.2.1 EmailField() 邮件地址字段的格式
4.2.2 EmailField() 邮件地址字段的可选项
4.2.3 EmailField() 邮件地址字段的使用案例
4.3 UUIDField() UUID 字段
4.3.1 UUIDField() UUID 字段的格式
4.3.2 UUIDField() UUID 字段的案例

内容五:Django Models 常用的逻辑字段
5.1 AutoField() 自动递增字段
5.1.1 AutoField() 自动递增字段的格式
5.1.2 AutoField() 自动递增的可选项
5.1.3 AutoField() 自动递增的使用案例
5.2 BooleanField() 布尔(boolean)值字段
5.2.1 BooleanField() 布尔(boolean)值字段的格式
5.2.2 BooleanField() 布尔(boolean)值字段的可选项
5.2.3 BooleanField() 布尔(boolean)值字段的案例
5.3 ForeighKey() 外键一对多字段
5.3.1 ForeighKey() 外键一对多字段的格式
5.3.2 ForeighKey() 外键一对多字段的必选项
5.3.3 ForeighKey() 外键一对多字段的可选项
5.3.4 ForeighKey() 外键一对多字段的使用案例

内容六:Django Models 常用的外部资源字段
6.1 FileField() 文件字段
6.1.1 FileField() 文件字段的格式
6.1.2 FileField() 文件字段的必选项
6.1.3 FileField() 文件字段的可选项
6.1.4 FileField() 文件字段的使用案例
6.2 URLField() URL 字段
6.2.1 URLField() URL 字段的格式
6.2.2 URLField() URL 字段的可选项
6.2.3 URLField() URL 字段的使用案例
6.3 ImageField() 图片字段
6.3.1 ImageField() 图片字段的格式
6.3.2 ImageField() 图片字段的可选项
6.3.3 ImageField() 图片字段的使用案例

具体的内容:
内容一:Django Models 常用的文本字段
1.1 CharField() 字符串字段
1.1.1 CharField() 字符串字段的格式
<字段名> = models.CharField(max_length = <字符串长度>, <可选项>)

1.1.2 CharField() 字符串字段的必选项
max_length = <文本长度>
或者:
max_length = None

1.1.3 CharField() 字符串字段的可选项
(1)blank = True #值可以为空
(2)null = True #值可以为空
(3)default = '<要设置的默认值>' #值可以为空,可以设置成其他的值
(4)unique = True #值唯一

1.1.4 CharField() 字符串字段的使用案例
item = models.CharField(max_length = 20, unique = True)

(补充:这里以设置名为 item,且是唯一的 CharField() 字符串字段为例)

1.2 TextField() 文本字段
1.2.1 TextField() 文本字段的格式
<字段名> = models.TextField(max_length = <字符串长度>, <可选项>)

1.2.2 TextField() 文本字段的必选项
max_length = <文本长度>
或者:
max_length = None

1.2.3 TextField() 文本字段的可选项
(1)blank = True #值可以为空
(2)null = True #值可以为空
(3)default = '<要设置的默认值>' #值可以为空,可以设置成其他的值
(4)unique = True #值唯一

1.2.4 TextField() 文本字段的使用案例
item = models.TextField(max_length = 20, unique = True)

(补充:这里以设置名为 item,且是唯一的 TextField() 文本字段为例)

内容二:Django Models 常用的数值字段
2.1 IntegerField() 整数字段
2.1.1 IntegerField() 整数字段的格式
<字段名> = models.IntegerField(max_length = <字符串长度>, <可选项>)

2.1.2 IntegerField() 整数字段的必选项
max_length = <文本长度>
或者:
max_length = None

2.1.3 IntegerField() 整数字段的可选项
(1)blank = True #值可以为空
(2)null = True #值可以为空
(3)default = '<要设置的默认值>' #值可以为空,可以设置成其他的值

2.1.4 IntegerField() 整数字段的使用案例
item = models.TextField(max_length = 20)

(补充:这里以设置名为 item,长度为 20 的 IntegerField() 整数字段为例) 

2.2 PositiveIntegerFiled() 正整数字段
2.2.1 PositiveIntegerFiled() 正整数字段的格式
<字段名> = models.IntegerField(max_length= <字符串长度>, <可选项>)

2.2.2 PositiveIntegerFiled() 正整数字段的必选项
max_length = <文本长度>
或者:
max_length = None

2.2.3 PositiveIntegerFiled() 正整数字段的可选项
(1)blank = True #值可以为空
(2)null = True #值可以为空
(3)default = '<要设置的默认值>' #值可以为空,可以设置成其他的值

2.2.4 PositiveIntegerFiled() 正整数字段的使用案例
item = models.TextField(max_length= 20)

(补充:这里以设置名为 item,长度为 20 的 PositiveIntegerFiled() 正整数字段为例)

2.3 DecimalField() 小数字段
2.3.1 DecimalField() 正整数字段的格式
<字段名> = models.DecimalField(max_digits = <小数的总共位数>, decimal_places = <小时点后面保留几位>)

2.3.2 DecimalField() 小数字段的必选项
(1)max_digits = <小数的总共位数> #小数字段总共位数
(2)decimal_places = <小数点后面保留几位> #小数字段小数点后保留几位

2.2.3 DecimalField() 小数字段的使用案例
item = models.DecimalField(max_digits = 5, decimal_places = 2)

(补充:这里以设置名为 item,长度为 5,小数点后保留 2 位的 DecimalField() 小数字段为例)

内容三:Django Models 常用的日期字段
3.1 DateField() 日期字段
3.1.1 DateField() 日期字段的格式
<字段名> = models.DateField(<可选项>)

3.1.2 DateField() 日期字段的可选项
auto_now = True #自动更新创建时间

3.1.3 DateField() 日期字段的使用案例

item = models.DateField(auto_now_add=True)

(补充:这里以设置名为 item,可自动更新的 DateField() 日期字段为例)

3.2 DateTimeField() 日期时间字段
3.2.1 DateTimeField() 日期时间字段的格式
<字段名> = models.DateTimeField(<可选项>)

3.2.2 DateTimeField() 日期时间字段的可选项
auto_now = True #自动更新创建时间

3.2.3 DateTimeField() 日期时间字段的使用案例
item = models.DateTimeField(auto_now_add=True)

(补充:这里以设置名为 item,可自动更新的 DateTimeField() 日期时间字段为例)

内容四:Django Models 常用的标准格式字段
4.1 IPAddressField() IPv4 地址字段
4.1.1 models.IPAddressField() IPv4 地址字段的格式
<字段名> = models.IPAddressField()

4.1.2 models.IPAddressField() IPv4 地址字段的使用案例
item = models.IPAddressField()

(补充:这里以设置名为 item 的 IPAddressField() IPv4 地址字段为例)

4.2 EmailField() 邮件地址字段
4.2.1 EmailField() 邮件地址字段的格式
<字段名> = models.EmailField(<可选项>)

4.2.2 EmailField() 邮件地址字段的可选项
unique = True #值唯一

4.2.3 EmailField() 邮件地址字段的使用案例
item = models.EmailField(unique = True)

(补充:这里以设置名为 item 的,且是唯一的 EmailField() 邮件地址字段为例)

4.3 UUIDField() UUID 字段
4.3.1 UUIDField() UUID 字段的格式
<字段名> = models.UUIDField()

4.3.2 UUIDField() UUID 字段的案例
item = models.UUIDField()

(补充:这里以设置名为 item 的 UUIDField() UUID 字段为例)

内容五:Django Models 常用的逻辑字段
5.1 AutoField() 自动递增字段
5.1.1 AutoField() 自动递增字段的格式
<字段名> = models.AutoField(<可选项>)

5.1.2 AutoField() 自动递增的可选项
primary_key = True #设置为主键

5.1.3 AutoField() 自动递增的使用案例
item = models.AutoField(primary_key = True)

(补充:这里以设置名为 item 的,且设置为主键的 AutoField() 自动递增字段为例)

5.2 BooleanField() 布尔(boolean)值字段
5.2.1 BooleanField() 布尔(boolean)值字段的格式
<字段名> = models.BooleanField(<可选项>)

5.2.2 BooleanField() 布尔(boolean)值字段的可选项
default=<默认值> #设置布尔(boolean)值的默认值,默认值可选项有且只有:True 和 False

5.2.3 BooleanField() 布尔(boolean)值字段的案例
item = models.BooleanField(default=False)

(补充:这里以设置名为 item 的,且默认值为 False 的布尔(boolean)值字段为例)

5.3 ForeighKey() 外键一对多字段
5.3.1 ForeighKey() 外键一对多字段的格式
<字段名> = ForeighKey(<要删除的字段名>,to,on_delete = models.CASCADE, <可选项>)

5.3.2 ForeighKey() 外键一对多字段的必选项
on_delete = models.CASCADE #删除选项

5.3.3 ForeighKey() 外键一对多字段的可选项
(1)null = True #值可以为空
(2)default = '<要设置的默认值>' #值可以为空,可以设置成其他的值
(3)"limit_choices_to = " # 如果有必要,可以设置
(4)related_name = xxx # 便于反向查询

5.3.4 ForeighKey() 外键一对多字段的使用案例
item = models.ForeignKey(name,
on_delete = models.CASCADE,
limit_choices_to =  {‘is staff’:True},
related_name = name}

(补充:这里以设置名为 item 的,且删除关联 name 字段ForeighKey() 外键一对多字段为例)

内容六:Django Models 常用的外部资源字段
6.1 FileField() 文件字段
6.1.1 FileField() 文件字段的格式
<字段名> = models.FileField(upload_to = "<文件目录>", <可选项>)

6.1.2 FileField() 文件字段的必选项
upload_to='<文件目录>'

6.1.3 FileField() 文件字段的可选项
max_length = '<要设置的大小>'

6.1.4 FileField() 文件字段的使用案例
item = models.FileField(upload_to ="./file", max_length = '4096')

(补充:这里以设置名为 item 的,读取本地的 ./file 文件,大小为 4096 的 FileField() 文件字段为例)

6.2 URLField() URL 字段
6.2.1 URLField() URL 字段的格式
<字段名> = models.URLField(max_length=<URL 大小>, <可选项>)

6.2.2 URLField() URL 字段的可选项
(1)verify_exists = True #默认值为 True,如果 URL 不存在,则会返回 404
(2)max_length=<URL 大小> #默认值为 200

6.2.3 URLField() URL 字段的使用案例
item = models.URLField(max_length= 200)

(补充:这里以设置名为 items 的,大小的为 200 的 URLField() URL 字段为例)

6.3 ImageField() 图片字段
6.3.1 ImageField() 图片字段的格式
item = models.ImageField(upload_to = "<文件目录>", <可选项>)

6.3.2 ImageField() 图片字段的可选项
(1)height_field = <要设置的大小>
(2)width_field = <要设置的大小>
(3)max_length = <图片大小>

6.3.3 ImageField() 图片字段的使用案例
item = models.ImageField(upload_to = "./file")

(补充:这里以设置名为 item 的,读取本地的 ./file 文件的 ImageField() 图片字段为例)

参考文献:

https://docs.djangoproject.com/en/3.2/ref/models/fields/