❝在 Django 中,项目包括特定网站的配置和应用程序。因此,单个项目实际上可能包括多个应用程序。然而,为了简单起见,在此创建的项目只包括一个应用程序。
❝首先,您可能要创建一个用于存储 Django 项目的文件夹,从操作系统提示符进入此文件夹,然后发出以下命令:
(django_oracle) [jon@Python01 app]$ django-admin.py startproject DatabaseOperation
❝结果,应该显示 DatabaseOperation文件夹及其内含的以下四个文件:init.py、manage.py、settings.py 以及 urls.py。这四个文件的每一个都在项目中起着特定作用。
包括 init.py 是为了让此目录成为 Python 程序包,以便您能够通过点符号引用项目的各部分;例如,DatabaseOperation.settings。 manage.py 表示与上述 django-admin.py 提供相同命令但旨在用于此特定项目的命令行实用程序。 settings.py 是包含项目设置的配置文件。在此,您可以指定数据库连接信息、时区和语言代码、有关项目中所安装的应用程序的信息,以及一些其他设置。 urls.py 又称为 URLconf,是包含将 URL 模式映射到 Python 回调函数的 Python 代码的配置文件。
❝您可以看到,即使 Django 项目的配置文件也是以 Python 源代码文件的形式提供。此方法被证明很有优势,因为它使您能够动态指定设置和/或从其他配置文件中导入设置。
❝进行下一步操作前需要配置数据库的连接信息,默认是通过SQLite3实现数据库创建,我们现在暂时使用Oracel或者MySQL。需要编辑 DatabaseOperation文件夹中的 settings.py 文件,将DATABASES字节组的数据库信息进行修改,如下所示:
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
注1: django默认使用MySQLdb模块连接mysql。但是在python3中没有这个模块只有python2中有这个模块,python3只有pymysql模块,所以我们需要主动修改为pymsql
解决方案:
在project同名文件下的__init__.py文件中添加如下代码即可
import pymysql
pymysql.install_as_MySQLdb()
注:没有 pymysql 的话,可以这样安装 pip install pymysql
注2: 报错异常
File "/home/Jon/Envs/djenv1/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module> raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version) django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
解决方案:
❝打开文件报错的提示目录文件:"/home/Jon/Envs/djenv1/lib/python3.6/site-packages/django/db/backends/mysql/base.py" 。注释下面一段话:
# if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version)
注3: 报错异常:Pycharm连接数据库出现
RuntimeError: cryptography is required for sha256_password or caching_sha2_password
解决方案:
安装cryptography即可:
pip install cryptography
注4: 报错异常
File "/home/zhangtq/.local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
解决方案:
❝打开文件报错的提示目录文件"/home/zhangtq/.local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py",将decode改为encode即可。
❝现在您已创建项目,可以继续下一环节,在此项目内创建一个应用程序。为此,进入先前由 django-admin.py 生成的 DatabaseOperation文件夹,并发出以下命令:
(django_oracle) [jon@Python01 DatabaseOperation]$ python manage.py startapp datadump
❝上述命令应该生成文件夹 datadump 及其内含的以下四个文件:init.py、models.py、views.py 以及 tests.py。
同样,init.py 用于使此目录成为 Python 程序包。 Tests.py 可用于为应用程序构建测试套件。此外,您将使用其余的两个文件分别定义应用程序的模型和视图: models.py 用于包含模型(您在 django.db.models.Model 类之上构建的 Python 类),其中每个模型都映射到一个数据库表。 views.py 用于包含视图(Python 函数),其中每个视图或者返回 HttpResponse 对象(内容将显示在所请求页面上),或者引发 HTTP 异常。
❝下一步是将新创建的应用程序与项目相关联。为此,您需要编辑 DatabaseOperation文件夹中的 settings.py 文件,将字符串“DatabaseOperation.datadump”追加到 INSTALLED_APPS 字节组中,如下所示:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'DatabaseOperation.datadump',
]
❝您已完成了应用程序主干的构建。然而,在可以查看应用程序是否正常工作之前,需要执行一些额外步骤。当然,这些步骤可能会有所不同,具体取决于您希望应用程序执行的操作。
❝例如,如果您要构建不与数据库交互的简单应用程序,则不需要将数据库信息放在 settings.py 配置文件以及设计数据模型中。但在大多数情况下,您至少需要执行以下五个步骤:
在 settings.py 中指定数据库信息 创建模型(models) 创建模板(templates) 创建视图(views) 在 urls.py 中配置 URL 模式
❝在继续上述步骤之前,让我们看一下 Django 应用程序的高级视图,以便您可以更好地了解 Django 中的组件如何工作。下图示意性地显示了 Django 应用程序如何工作以满足用户请求。

❝根据此图中的图示,工作方式如下:
用户输入支持 Django 的站点的 URL 或在此站点的已加载页面上执行操作,从而将请求发送到托管此站点的 Web 服务器。 Django 的 URL 调度程序遍历 urls.py 文件中的 URL 模式,并选择第一个与用户请求的 URL 匹配的模式,然后调用与所发现模式相关联的视图(Python 回调函数)。 视图使用数据模型获得数据库数据,然后加载指定模板(已嵌入特殊模板标记的 HTML 页面;它类似于 Java 中的 JavaServer Page),并向其传递上下文(包括映射到模板变量名称的已获得数据)。 最后,视图返回由已呈现模板填充的 HttpResponse 对象,如果出现错误,则返回 HTTP 异常。
❝您可以看到,Django 基于将 Web 应用程序逻辑分为模型、视图和模板的概念,因此有效地将业务逻辑和展示分离开来。通常,这类似于当今许多其他 Web 框架中使用的模型-视图-控制器 (MVC) 范例。然而,在 Django 中,视图更像控制器,介于模型和模板之间。而 Django 模板更接近于 MVC 视图,因为这些模板负责使用从模型中获得的数据生成适当的用户界面。
参考:https://www.oracle.com/technetwork/cn/articles/vasiliev-django-100817-zhs.html




