Django 模型

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
MySQL 是 Web 应用中最常用的数据库。

如果你没安装 mysql 驱动,可以执行以下命令安装:

pip install mysqlclient
conda install mysqlclient

连接MySQL驱动

  • mysqlclient

    • python 2 , 3都能直接使用
    • 致命缺点:对mysql安装有要求,必须指定位置存在配置文件
  • python-mysql

    • python2支持很好
    • python3不支持
  • pymysql

    • python2,python3都支持
    • 它还可以伪装成前面的库。
伪装

在django项目中的__init__.py中添加

import pymysql
pymysql.install_as_MySQLdb()

或者

from pymysql import install_as_MySQLdb
install_as_MySQLdb()

作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。


数据库配置

我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'django',	# 数据库名
        'USER': 'root',		# 账号
        'PASSWORD': 'root',	# 密码
        'HOST':'127.0.0.1',	# ip
        'PORT':'3306',		# 端口号
    }
}

这里添加了中文注释,所以你需要在 HelloWorld/settings.py 文件头部添加 #-*- coding: UTF-8 -*-
上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。

SQLite

  • 轻量级的嵌入式级的数据库
  • 特点是小
    • 常用场景
    • Android、ios、
  • 数据库常规操作90%类似于MySQL

定义模型

创建 APP

Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个 App的 app:

django-admin startapp App

目录结构如下:

HelloDjango
|-- App
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   |-- views.py

接下来在settings.py中找到INSTALLED_APPS这一项,进行注册,如下:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'App',               # 添加此项
)

template(模板)配置

App下创建templates文件夹,并编写hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<ul>
    <li>今天</li>
    <li>天气</li>
    <li>很好</li>
    <li>适合</li>
    <li>睡觉</li>
</ul>
</body>
</html>

模板配置方式

两种:

  • app中进行模板配置
    • 只需在app的根目录下创建templates文件夹即可。
    • 如果想要代码提示,我们应该将文件夹标记为template folder
  • 项目目录中进行模板配置
    • 需要在项目目录中创建templates文件夹并标记
    • 需要在settings中进行注册

在开发中使用第二种,模板可以继承、复用。

用例

项目的根目录下创建templates,并添加home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
今天天气晴朗,是个学习的好日子。
</body>
</html>

在settings.py中的TEMPLATES中添加

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR,'templates'),		# 添加目录,BASE_DIR是项目的绝对路径
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

App中的views.py中添加

def home(request):
    return render(request,'home.html')

项目目录下的urls.py中添加

from django.conf.urls import url
from App import views

urlpatterns = [
    url(r'^home/', views.home),
]

启动项目,并访问http://127.0.0.1/home/


View编写(Controller)

App下的views.py编写如下:

def hello(request):
    return HttpResponse('双击666')
    
def index(request):
    return render(request,'hello.html')

路由配置

找到项目目录下的urls.py,配置如下:

from django.conf.urls import url
from django.contrib import admin
from App import views	# templates下的views.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/', views.hello),	# 添加url
]

启动项目

python manage.py runserver

访问网页http://127.0.0.1/hello/

路由优化配置
  • 项目如果逻辑比较复杂可以进行拆分,拆分为多个app。
  • 继续拆分路由器urls
    • 在app中创建自己的urls

      • urlpatterns 路由规则列表
      • 在根urls中进行子路由的包含
    • 子路由的使用

      • 根路由的规则 + 子路由的规则

推荐使用子路由

步骤:
(1)在创建的App中创建urls.py,然后添加以下内容:

from App import views

urlpatterns = [
    url(r'^index/',views.index)
]

(2)在主目录下的urls.py添加一下内容:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'App/',include('App.urls'))
]

启动项目,并访问地址:http://127.0.0.1:8000/App/index/

整个数据交互流程图