Django 系列博客(四)_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

Django 系列博客(四)

媒介

本篇博客引见 django 怎样和数据库举行交互而且经由过程 model 举行数据的增删查改

ORM简介

ORM全称是:Object Relational Mapping(工具干系映照),其主要作用是在编程中,把面向工具的观点跟数据库中表的观点对应起来。举例来讲就是,我界说一个工具,那就对应着一张表,这个工具的实例,就对应着表中的一条纪录。

好比在赫赫有名的 pythonWEB 框架 Django 就是运用了工具干系映照,这个对应 Django 中的 model文件。

from django.db import models

# Create your models here.

class UserInfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)

经由过程工具干系映照,这个类就会对应数据库中的 UserInfo 表,内里有三个字段,id 为自增而且为主键,别的两个为 name 和 pwd 字段,都是可变长范例。

经由过程 orm 和数据库举行交互举行增删查改,猎取的数据会在 views 文件中来举行逻辑推断。

数据返回

以后后端举行交互后须要往前端传送数据,在 Django 中有三种体式格局:

  1. render:返回一个模板(页面)

该函数有五个参数:

  • request:这是前端发过来的数据鸠合,内里能够猎取表单中的数据,或许猎取要求体式格局、状况码等;
  • template_name:这个是模板称号,模板为 templates 中的 index 文件;
  • context:内容,须要返回的数据,默以为 None;
  • content_type:数据内容范例,默以为 None;
  • using:未知。

当挪用这个函数时,会找到模板文件,翻开,若是 context 不为空的话,就会用 django 的模板衬着体式格局将数据加到模板中,然后返回给前端。

content为经由loader.render_to_string加工后的数据,然后经由 HttpResponse 类的实例化天生一个工具返回给前端,那末在前端能够经由过程工具的点语法举行取值。

  1. redirect:重定向到某个地点

检察源码可知,起首在 redirect 函数中举行了推断,假定该函数没有参数,只要一个重定向途径,也就是 to 这个参数,那末 redirect_class为 HttpResponseRedirect 类,然后举行实例化返回。

检察 resolve_rul源码,在内里对 to 变量举行了一些推断等事情然后再返回,返回以后经由 redirect_class类(在这里也就是 HTTPResponseRedirect)举行实例化,

检察源码:

发明状况码为302,然后进入 HTTPResponseRedirectBase,检察源码:

经由 HTTPResponseRedirect 实例化得工具返回到前端。

  1. HttpResponse:返回字符串。

这个类也是 render 和 redirect 须要挪用的类来实例化工具。不外直接由 HttpResponse 类天生的工具是字符串,没有页面显现。

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

ORM 衔接数据库

ORM 衔接 sqlite3

  1. 设置装备摆设 settings 文件

实在不消设置装备摆设,默许就是衔接 sqlite3

在 settings 内里有个数据库设置装备摆设选项:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }}

能够晓得 django 默许的数据库引擎为 sqlite3,数据库名字为数据库的途径。衔接数据分为两步:

  1. 在 models 中建立类和字段
from django.db import models

# Create your models here.

class UserInfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)
  1. 把表同步到数据库(由于 orm 不克不及建立表,以是须要手动建立一个对应的数据库)。建立完成后在项目根目录下运转两条敕令。

    • python3 manage.py makemigrations

    这条敕令并没有将 models 中的表同步到数据库,只是在 migrations 中做了一个纪录,而且会在 migrations 文件夹中天生一个0001_initial.py文件

    # -*- coding: utf-8 -*-
    # Generated by Django 1.11.9 on 2019-01-07 06:59
    from __future__ import unicode_literals
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='UserInfo',
                fields=[
                    ('id', models.AutoField(primary_key=True, serialize=False)),
                    ('name', models.CharField(max_length=32)),
                    ('pwd', models.CharField(max_length=32)),
                ],
            ),
        ]

    • python3 manage.py migrate

    将数据表同步到数据库中

经由这两步会在数据库中建立出来一些表:

这些表都是什么意思呢?

第一张表app_userinfo为 models 中建立的类所对应的表(mysql 不辨别大小写),而且会自动将 app 的名字拼接到表名之前,以后 auth 开首的透露表现关于认证的表,django 开首的透露表现 django 认证的表,现在来讲不消体贴。

ORM 衔接Mysql

衔接 mysql 也很简单,比衔接 sqlite3多了两步,而且这两步是在之前就要举行的。

  1. 设置装备摆设 settings 文件

由于是衔接 mysql,以是 settings 中的数据库须要变动设置装备摆设。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_03',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'password'
    }
}

注重:default 对应的value 中的 key 必需运用大写,其他除 ENGINE 一样外,其他的参数都须要依据本身的数据库来设置装备摆设。设置装备摆设胜利后能够经由过程 pycharm 自带的数据库模块来举行测试是不是衔接胜利:

衔接胜利会显现 successful。

  1. 设置装备摆设 app 下的 init 文件,不要写错处所了
import pymysql

pymysql.install_as_MySQLdb()
  1. 在 models 中建立类和字段

和 sqlite3的一样,

from django.db import models

# Create your models here.

class UserInfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)
  1. 把表同步到数据库
#数据库表并没有同步到数据库,只是在migrations内做了一个纪录
-python3 manage.py makemigrations
#才将数据表同步到数据库
-python3 mangae.py migrate

运用 orm 举行增删查改

和数据库衔接胜利后,能够经由过程表所对应的工具来举行操纵,在本文的数据库工具就是UserInfo.object,打印出来可知该工具是app.UserInfo.objects

经由过程这个这个类(对应数据库中的表)能够操纵数据库

# 该表有两个三个字段,个中 id 是自增能够不消传值
name = 'musibii'
pwd = '123'
UserInfo.objects.create(name=name, pwd=pwd)

# 好比 id 为1,想要删除一个数据起首须要依据 id 猎取数据
UserInfo.objects.filter(id=1).delete()

查一个

ret = UserInfo.object.filter(id=1).first()
print(ret)

查多个

ret = UserInfo.objects.all()

name = 'maffia'
pwd = 'abc'
ret = UserInfo.objects.filter(id=1).update(name=name, pwd=pwd)
-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。