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

报错代码

在网页上出现的报错信息

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

解决方法

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

将以下内容:

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

修改为:

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

[内容] pip 工具的安装 (MacBook Air 版)

内容一:安装 pip2

1.1 下载 pip2

$ curl 'https://bootstrap.pypa.io/pip/2.7/get-pip.py' > get-pip.py

1.2 安装 pip2

$ sudo python get-pip.py

1.3 删除 pip2

$ rm get-pip.py

1.4 显示安装的 pip2

1.4.1 显示在 python 里有没有 pip 安装包
$ ls /Library/Python/2.7/site-packages/

(补充:这里以 Python 版本是 2.7 为例)

1.4.2 显示有没有 pip2 命令
$ which pip2
1.4.3 升级 pip2
$ sudo pip2 install --upgrade pip

内容二:安装 pip3

2.1 准备安装 pip3 所需的环境

2.1.1 安装 python3
2.1.1.1 输入 python3 命令
$ python3
2.1.1.2 在弹出的对话框里安装 python3

(步骤略)

2.1.2 安装 xcode
2.1.2.1 输入 xcode-select –install 命令
$ xcode-select --install
2.1.2.2 在弹出的对话框里安装 xcode

(步骤略)

2.2 安装 pip3

2.2.1 下载 pip3
$ curl 'https://bootstrap.pypa.io/pip/get-pip.py' > get-pip.py
2.2.2 安装 pip3
$ sudo python get-pip.py
2.2.3 删除 pip3
$ rm get-pip.py
2.2.4 显示安装的 pip3
2.2.4.1 显示在 python 里有没有 pip 安装包
$ ls /Library/Python/3.8/site-packages/

(补充:这里以 Python 版本是 3.8 为例)

2.2.4.2 显示有没有 pip3 命令
$ which pip3
2.2.4.3 升级 pip3
$ sudo pip3 install --upgrade pip

[内容] Django MVT 模式简介

内容一:Django MVT 模式的视图

         URL Dispatcher

Browser                  Views Models database

         Cache Templates

内容二:Django MVT 模式简介

2.1 访问页面

Browser –> URL Dispatcher –> Views Models –> Database

2.2 应答页面

Database –> Views Models –> URL Dispatcher –> Browser

[实验] Django 样式的实现

注意:

文中的 python 系统名、mysite 项目和 app 应用只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files
3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 myapp 应用

4.1 创建 myapp 应用

(django_env) [root@python mysite]# django-admin startapp myapp

4.2 myapp 应用的目录

4.2.1 显示 myapp 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

1) users/app.py 此 Django 应用的容器
2) users/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
3) users/admin.py 此 Django 应用自带的后台管理相关的类
4) users/app.py 此 Django 应用指定应用名的文件
5) users/migrations.py 此 Django 应用通过 Python 代码生成数据库表时里面会产生一些迁移文件
6) users/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) users/test.py 此 Django 应用的测试文档
8) users/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

步骤五:配置 mysite 应用和 myapp 应用

5.1 在 myapp 应用中添加 1 个 css 样式

创建 mysite.myapp.static.myapp.style.css 并添加以下内容:

.title{
    text-align: center;
    color: brown;
}

.content{
    text-align: center;
    color: red;
}

5.2 在 myapp 应用中添加 1 个 HTML 模板

创建 mysite.myapp.templates.myapp.html1.html 并添加以下内容:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> {{ title }} </title>

    {% load static %}

    <link rel="stylesheet" type="text/css" href="{% static 'myapp/style.css' %}">

</head>
<body>
    <article>
        <h1 class='title'> {{ title }} </h1>
        <p class='content'> {{ content }} </p>
    </article>
</body>
</html>


补充:这里
1) {{ title }} 代表设置了 1 个名为 title 的变量
2) {{ content }} 代表设置了 1 个名为 content 的变量

5.3 在 myapp 应用中添加 2 个网页返回值的模块

在 mysite.myapp.views.py 中添加以下内容:

......
from django.shortcuts import render
......
def html1(request):
    return render(request, "myapp/html1.html", {"title":"html1","content":"This is html1"})

def html2(request):
    return render(request, "myapp/html1.html", {"title":"html2","content":"This is html2"})


补充:这里以
1) 设置 html1 模块并返回 myapp/html1.html 设置 title 的变量是 “html1” 且 content 变量是 “This is html1” 的值
2) 设置 html2 模块并返回 myapp/html1.html 设置 title 的变量是 “html2” 且 content 变量是 “This is html2” 的值
为例

5.4 在 myapp 应用中添加 2 个链接并设置对应的模块

创建 mysite.myapp.urls.py 并添加以下内容:

from django.conf.urls import url
from myapp.views import html1,html2

urlpatterns = [
    url('html1/', html1),
    url('html2/', html2),
]


补充:这里以
1) 设置 html1 链接对应 html1 模块为例
2) 设置 html2 链接对应 html2 模块为例

5.5 在 mysite 应用中添加 1 个链接并链接 myapp 的链接

在 mysite.mysite.urls.py 中添加以下内容:

......
from django.conf.urls import url, include
......
urlpatterns = [
......
    url(r'^page/', include('myapp.urls')),
]

5.6 在 mysite 应用中导入 myapp 应用

在 mysite.mysite.settings.py 中添加以下内容:

......
INSTALLED_APPS = [
......
    'myapp',
]
......

步骤六:启动 Django 服务

(django_env) [root@python mysite]# python manage.py runserver 0.0.0.0:8000

(补充:这里以指定本地 8000 端口启动 Django 服务为例)

步骤七:测试 Django css 样式

打开浏览器输入以下网址:

http://127.0.0.1:8000/page/html1/
http://127.0.0.1:8000/page/html2/

[实验] Django 模板的实现

注意:

文中的 python 系统名、mysite 项目和 app 应用只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 myapp 应用

4.1 创建 myapp 应用

(django_env) [root@python mysite]# django-admin startapp myapp

4.2 users 应用的目录

4.2.1 显示 users 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

1) users/app.py 此 Django 应用的容器
2) users/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
3) users/admin.py 此 Django 应用自带的后台管理相关的类
4) users/app.py 此 Django 应用指定应用名的文件
5) users/migrations.py 此 Django 应用通过 python 代码生成数据库表时里面会产生一些迁移文件
6) users/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) users/test.py 此 Django 应用的测试文档
8) users/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

步骤五:配置 mysite 应用和 myapp 应用

5.1 在 myapp 应用中添加 1 个 HTML 模板

创建 mysite/myapp/templates/myapp/html1.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> {{ title }} </title>
</head>
<body>
    <article>
        <h1> {{ title }} </h1>
        <p> {{ content }} </p>
    </article>
</body>
</html>


补充:这里
{{ title }} 代表设置了 1 个名为 title 的变量
{{ content }} 代表设置了 1 个名为 content 的变量

5.2 在 myapp 应用中添加 2 个网页返回值的模块

在 mysite/myapp/views.py 中添加以下内容:

......
from django.shortcuts import render
......
def html1(request):
    return render(request, "myapp/html1.html", {"title":"html1","content":"This is html1"})

def html2(request):
    return render(request, "myapp/html1.html", {"title":"html2","content":"This is html2"})


补充:这里以
1) 设置 html1 模块并返回 myapp/html1.html 设置 title 的变量是 “html1” 且 content 变量是 “This is html1” 的值
2) 设置 html2 模块并返回 myapp/html1.html 设置 title 的变量是 “html2” 且 content 变量是 “This is html2” 的值
为例

5.3 在 myapp 应用中添加 2 个链接并设置对应的模块

创建 mysite/myapp/urls.py 并添加以下内容:

from django.conf.urls import url
from myapp.views import html1,html2

urlpatterns = [
    url('html1/', html1),
    url('html2/', html2),
]

(补充:这里以设置 html 链接对应 html1 模块为例)

5.4 在 mysite 应用中添加 1 个链接并链接 myapp 的链接

在 mysite/mysite/urls.py 中添加以下内容:

......
from django.conf.urls import url, include
......
urlpatterns = [
......
    url(r'^page/', include('myapp.urls')),
]

5.5 在 mysite 应用中导入 myapp 应用

在 mysite/mysite/settings.py 中添加以下内容:

......
INSTALLED_APPS = [
......
    'myapp',
]
......

步骤六:启动 Django 服务

(django_env) [root@python mysite]# python manage.py runserver 0.0.0.0:8000

步骤七:测试 Django 模板

打开浏览器输入以下网址:

http://127.0.0.1:8000/page/html1/
http://127.0.0.1:8000/page/html2/