Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第五章: django模型 > 5.3节: 快速入门ORM

5.3节: 快速入门ORM

薯条老师 2020-07-27 17:19:33 386764 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

5.3.1 快速入门ORM

在5.2节中介绍了使用ORM的核心流程:

(1) 在模型中定义一个类

(2) 在类中定义类属性,以及相关的操作方法

(3) 在视图中使用ORM的API对特定的模型进行操作。

(4) 使用django中的迁移命令,将模型与数据库建立映射

本节从一个简单的例子入手,来学习如何在django中使用ORM, 现在请读者按照以下步骤来进行操作:

 (1) 打开chipscoco目录下的models.py,定义一个blog类

models.py更新后的代码:

from django.db import models
 
# Create your models here.
 
# 新增的代码
class Blog(models.Model):
    author = models.CharField(max_length=20)
    title = models.CharField(max_length=50)
    content = models.TextField()

在上文代码中定义了一个Blog类,在模型中使用ORM时,定义的类须从models.Model或其子类中进行继承。Blog类中定义了三个类属性:author,title,content,分别表示博客的作者,标题,内容。代码中的xxxField是django内置的字段类型,表示数据表中的字段类型,例如以下代码:

author = models.CharField(max_length=20)

上文代码表示在数据表中定义了一个author字段,其字段类型为字符串类型,最大长度为20。关于模型的字段类型,会5.4节中进行详细讲解。Blog类型的定义,类似于如下的SQL语句:

CREATE TABLE blog_blog (
"id" serial NOT NULL PRIMARY KEY,
"author" varchar(20) NOT NULL,
"title" varchar(50) NOT NULL,
"content" tex NOT NULL
);

django在使用ORM创建数据表时,会进行如下操作:

1.创建数据表,表名的格式为:appname_modelname

appname表示Django应用名,modelname表示模型名称,appname与modelname都是小写。

在我们当前的项目中,应用名称为chipscoco,模型名称为blog,故数据表名为chipscoco_blog。

2.创建一个id字段,用来定义数据表的主键

在模型的类属性中,如未指定主键字段,则Django会自动创建一个id字段,用来作为数据表的主键。

3.将模型中的类属性及类型,与数据表中的列名及类型进行映射。

(2) 注册django应用

使用定义的模型,需要先在项目配置文件中注册django应用。如何注册django应用,已于前面的章节中进行了介绍, 直接在settings.py中的INSTALLED_APPS添加项目的应用名称即可:

INSTALLED_APPS = [
    #...
    'blog',
    #...
]

(3) 在视图中使用模型进行数据渲染

打开blog目录下的views.py, 修改blog视图。blog视图更新后的代码:

# 从模型中导出Blog模型
from .models import Blog

def blog(request, page_id):
    if request.method == "GET":
    # 调用模型的get方法获取对应主键的数据,数据不存在时会抛出异常
    try: 
        blog = Blog.objects.get(id=page_id)
    except:
        blog = {"author": "", "title": "", "content": ""}

    # 将blog传递给模板blog.html,进行数据渲染
    return render(request, "blog/blog.html",{"blog": blog})

在blog视图的代码中,我们调用模型的get方法来从数据库中获取数据。django中的ORM为模型的操作提供了一系列的API,在5.5节的内容中会对ORM的API进行详细讲解。

(4) 更新模板目录中的blog.html

更新后的代码为:

{% load static %}
<html>
<head>
<title>Django的美妙爵士乐</title>
</head>

<body>
<img src="{%static 'images/django.jpg'%}">
 
{# 使用成员操作符.来访问字典中的键 #}
<h1>{{blog.title}}</h1>
<h5>{{blog.author}}</h5>
<p>{{blog.content}}</p>
 
</body>
</html>

在模板代码中,使用在blog视图中传递的blog变量,来对页面的内容进行渲染。

(5) 将模型与数据库建立映射

在第一步中,我们只是在代码中定义了一个模型类Blog,并未将django中的模型与数据库中的数据表建立起映射关系。创建模型与数据库的映射,需要使用django中的迁移命令。使用django迁移命令的核心流程:

1. 使用makemigrations 命令生成迁移脚本,迁移脚本保存在Django应用中的migrations目录中

按下键盘的windows键,输入cmd命令进入windows命令行,在命令行中切换到d盘的django-project目录。切换完毕以后,在命令行中执行python manage.py makemigrations命令。

命令执行成功后的输出信息:

D:\django-project>python manage.py makemigrations

Migrations for 'blog':

  blog\migrations\0001_initial.py

- Create model Blog

从命令行的输出中,我们得知django已成功地创建了Blog模型,且迁移脚本保存在目录migrations中。打开migrations目录下的0001_initial.py,脚本代码为:

# Generated by Django 2.2.6 on 2019-11-17 03:50
 
from Django.db import migrations, models
 
 
class Migration(migrations.Migration):
 
    initial = True
 
    dependencies = [
    ]
 
    operations = [
        migrations.CreateModel(
            name='Blog',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('author', models.CharField(max_length=20)),
                ('title', models.CharField(max_length=50)),
                ('content', models.TextField()),
            ],
        ),
    ]


在该脚本代码中,定义了一个Migration类,在Migration类的类属性operations中定义了与数据表创建相关的操作。从模型创建的代码中可获悉如下信息:

(1) 模型名为Blog

(2) django自动添加了一个id的主键字段

2. 使用migrate命令执行模型迁移,执行完毕以后,Django会在数据库中创建对应的数据表

migrate命令会自动执行在migrations目录中最新版本的迁移脚本。继续在命令行中执行python manage.py migrate命令,命令执行成功后的输出信息:

D:\django-project>python manage.py migrate

Operations to perform:

  Apply all migrations: admin, auth, blog, contenttypes, sessions

Running migrations:

  Applying blog.0001_initial... OK

 从输出信息中得知,django成功地执行了脚本0001_initial.py中的代码。

 (6) 在浏览器中进行测试

同学们在测试前需要先启动Django服务器。启动django服务器以后在浏览器地址栏中输入http://127.0.0.1:8080/blog/1314.html

image.png 

此时页面中的内容为空,因为还没有在数据库中插入任何数据。django内置了一个后台管理系统,通过该管理系统可以直接将数据写入到数据库。

(7) 配置django后台系统

在后台管理系统中对数据库进行操作,需要先进行模型的注册。进入blog目录,修改脚本admin.py中的代码。admin.py更新后的代码为:

from django.contrib import admin
 
# 导出Blog模型
from .models import Blog
# Register your models here.
 
# 在后台系统中注册Blog模型
admin.site.register(Blog)

在创建django项目时,django已自动配置了管理后台的路由,打开chipscoco目录下的urls.py:

from django.contrib import admin
from django.urls import path,re_path
import blog.views as blog
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.Home.as_view()),
 
    path('arithmetic/', blog.arithmetic),
    path('html/', blog.Html.as_view()),
    re_path('blog/(\d+).html', blog.blog),
 
]

代码path('admin/', admin.site.urls)即对后台管理系统进行了路由配置,读者在浏览器中输入http://127.0.0.1:8080/admin/,可跳转至后台管理系统的登录页面。django后台管理系统的页面内容默认为英文,对settings.py进行修改,可以显示为中文。打开settings.py,找到与语言设置有关的全局变量:LANGUAGE_CODE。settings.py修改后的代码为:

# 设置语言为中文
LANGUAGE_CODE = 'zh-hans'

(8) 在后台中插入数据

在浏览器中输入http://127.0.0.1:8080/admin/可以直接跳转到管理系统的登录页面:

image.png 

登录页面中要求输入管理员的用户名和密码,进入windows命令行,切换到django-project目录,执行python manage.py createsuperuser,可以配置管理员的用户名和密码:

D:\Django-project>python manage.py createsuperuser

用户名: admin

电子邮件地址: 123456@qq.com

Password:

Password (again):

Superuser created successfully.

刷新浏览器,在页面中输入已配置好的用户名和密码,点击登录按钮以后,会出现如下的页面:

 image.png

 点击Blogs右侧的增加按钮,可以插入博客数据:

 image.png

点击保存按钮,Django会自动将数据写入到数据库,数据的主键id默认从1开始递增。

(9) 在浏览器中进行测试

在浏览器中输入http://127.0.0.1:8080/blog/1.html,可以显示已添加的博客数据。

image.png

5.3.2 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:



欢迎 发表评论: