Django学习笔记(4)——Django连接数据库

前言

  在MVC或者MTV设计模式中,模型(M)代表对数据库的操作。那么如何操作数据库呢?本小节就认真学习一下。首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下连接数据库需要了解的知识。

  其实之前已经有学习过,可以参考博客:Django学习笔记:初始Django

  但是这里想详细的进行学习,首先对Django 一些基本的知识点进行了解。

1,Django的流程实现

django
    #安装: pip3 install django

          添加环境变量

    #1  创建project
       django-admin startproject mysite

       ---mysite

          ---settings.py
          ---url.py
          ---wsgi.py

       ---- manage.py(启动文件)  

    #2  创建APP       
       python mannage.py startapp  app01

    #3  settings配置
    
       TEMPLATES

       STATICFILES_DIRS=(
            os.path.join(BASE_DIR,"template"),
        )

       STATIC_URL = '/static/' 
       #  我们只能用 STATIC_URL,但STATIC_URL会按着你的    STATICFILES_DIRS去找

    #4  根据需求设计代码
           url.py
           view.py

    #5  使用模版
       render(req,"index.html")   

    #6  启动项目
       python manage.py runserver  127.0.0.1:8090

    #7  连接数据库,操作数据
       model.py

  

2,代码填充

  根据需求,我们先完成主程序(也就是mysite/urls.py)的内容:

from mysql01 import views

# admin 后台的路由,先注释掉
urlpatterns = [
    path('admin/', admin.site.urls),
    # 你的路由,重点是引号中的正则表达式和后面的业务逻辑函数
    path('index/',views.index),
    # url(r'index/',views.index),
]

  注意:关于django.urls path 和django.conf.urls url 的区别,django中 url 和 path 都是配置路径,有什么不同呢?

  path 和 url 是两个不同的模块,效果都是响应返回页面,path调用的是python第三方模块或者框架,而url则是自定义的模块。

  当然,主要问题在于版本:  1.x版本用url   2.x 版本用path

 

  再填充我们APP的views

from django.shortcuts import render

# Create your views here.
def index(req):
    return render(req,'index.html')

  

  完成自己写的index.html文件(随便写的,内容如下)




    
    test


    

hello world

用户输入

  

  当你写入一个HTML文件在templates中,为了让Django知道我们的HTML文件在哪里,需要修改settings文件的相应内容,但是默认情况下,他正好使用,无需修改,除非特殊情况。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 要是有这一行,如果已经存在请保持原样
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        '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',
            ],
        },
    },
]

  

3,运行程式

  直接输出下面代码即可运行Django:

python manage.py  runserver

  在浏览器输入下面代码即可显示index.html内容:

127.0.0.1:8000/index

  

一,使用Django自带的sqlite3数据库

  Django通过自带的ORM框架可以操作数据库,并且自带轻量级的sqlite3数据库,Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以我们无需安装任何程式,就可以直接使用,下面我们先练习一下。

1.1  在settings中,配置数据库相关参数

  因为是自带的sqlite,所以无需修改,这里我们看一下:

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        # 这里可以指定使用的数据库类型,例如mysql
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

  

1.2 编译models.py

  Django通过自定义python类的形式来定义具体的模型,每个模型的物理存在方式就是一个python的Class,每个模型代表数据库中的一张表,每个类的实例代表数据库中的一行数据,类中的每个变量代表数据库中的一列字段。

  Django通过模型,将python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过python的代码进行数据库的操作。DJango通过ORM对数据库进行操作,下面直接看代码:

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    '''
        创建两个字段,最大长度是32,类型是char
        '''
    user = models.CharField(max_length= 32)
    pwd = models.CharField(max_length= 32)

  这里我们创建了两个字段,分别保存用户的名称和密码。

  上面的代码,相当于下面的原生SQL语句。

CREATE TABLE UserInfo (
    "id" serial NOT NULL PRIMARY KEY,
    "user" varchar(30) NOT NULL,
    "pwd" varchar(30) NOT NULL
);

  注意:

  • Django默认自动创建自增主键ID,当然也可以自己指定主键。
  • 上面的SQL语法基于PostgreSQL

更多字段和参数

  每个字段有一些特有的参数,例如,CharField 需要 max_length 参数来指定VARCHAR 数据库字段的大小。还有一些适用于所有字段的通用参数。这些参数在文档中有详细定义,这里我们学习一下最常用的:

<1> CharField
       字符串字段, 用于较短的字符串.
       CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层
限制该字段所允许的最大字符数.
 
 
<2> IntegerField
      #用于保存一个整数.
 
 
<3> FloatField
       一个浮点数. 必须 提供两个参数:
 
       参数    描述
       max_digits    总位数(不包括小数点和符号)
       decimal_places    小数位数
               举例来说, 要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
 
               models.FloatField(..., max_digits=5, decimal_places=2)
               要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
 
               models.FloatField(..., max_digits=19, decimal_places=10)
               admin 用一个文本框()表示该字段保存的数据.
 
 
<4> AutoField
       一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段;
       自定义一个主键:my_id=models.AutoField(primary_key=True)
       如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.
 
 
<5> BooleanField
       A true/false field. admin 用 checkbox 来表示此类字段.
 
 
<6> TextField
       一个容量很大的文本字段.
       admin 用一个